社区
C语言
帖子详情
算法PK系列(2)-- 八皇后变种
r11222
2010-03-17 03:05:12
大家都知道,八皇后是把 8 个皇后放在 8*8 的棋盘
现在的问题变成,N个 (N<=8) 皇后,放入8*8的棋盘,输出所有可能的方法!(就是所有皇后不能互相攻击,不清楚规制的请百度)
例如
N=2,
就是两个皇后放在8*8 的棋盘,输出 所有可能
最重要是高效! 高效!!高效!!!!!!!!
大家都来发表意见吧,哈哈!!
分数不多,惭愧了
...全文
209
15
打赏
收藏
算法PK系列(2)-- 八皇后变种
大家都知道,八皇后是把 8 个皇后放在 8*8 的棋盘 现在的问题变成,N个 (N<=8) 皇后,放入8*8的棋盘,输出所有可能的方法!(就是所有皇后不能互相攻击,不清楚规制的请百度) 例如 N=2, 就是两个皇后放在8*8 的棋盘,输出 所有可能 最重要是高效! 高效!!高效!!!!!!!! 大家都来发表意见吧,哈哈!! 分数不多,惭愧了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
super_chris
2010-04-03
打赏
举报
回复
如果N<8,
那么每一层除了在本层选择一个位置外,还有一个选择就是空出本层。
其它一如N=8的情况。
LZ不知我说的对否?
r11222
2010-03-23
打赏
举报
回复
唉。还是靠自己解决了。结贴、、、
r11222
2010-03-23
打赏
举报
回复
顶。。。。。。。
。
。。
。。。
r11222
2010-03-23
打赏
举报
回复
[Quote=引用 11 楼 mlee79 的回复:]
偶所知的现在最快的:
http://www.jsomers.com/nqueen_demo/nqueens.html
[/Quote]
这个不是我想要的,你的是N个皇后放在N*N表格
我想要的是N个皇后,放在8*8表格(N<8)
跪求
mLee79
2010-03-17
打赏
举报
回复
偶所知的现在最快的:
http://www.jsomers.com/nqueen_demo/nqueens.html
taodm
2010-03-17
打赏
举报
回复
因为8皇后改N皇后就应该是一、二行的改动量。
如果改不了,表明你对8皇后还掌握不够。
r11222
2010-03-17
打赏
举报
回复
顶.…为什么没人回答呢???
r11222
2010-03-17
打赏
举报
回复
跪求答案,说说你的想法,或者告诉我怎样修改八皇后的算法从而得到 N皇后的算法
SWJTUli
2010-03-17
打赏
举报
回复
显然不行
r11222
2010-03-17
打赏
举报
回复
[Quote=引用 5 楼 zyqde_0802 的回复:]
define 一个N值,把8改为N应该就行了吧
[/Quote]
这样不行的
zyqde_0802
2010-03-17
打赏
举报
回复
define 一个N值,把8改为N应该就行了吧
r11222
2010-03-17
打赏
举报
回复
我不是要八皇后啊...我会八皇后啊,我要是N皇后,随意的皇后数,嘻嘻。。。。
zyqde_0802
2010-03-17
打赏
举报
回复
//八皇后问题的实现
#include <iostream>
#include <conio.h>
using namespace std;
unsigned int sysSum=0;
//QueenChess类声明
class QueenChess
{
public:
QueenChess();
void Solve(); //求解八皇后问题,并给出放置成功的棋盘总个数
bool SafeJudge(int row,int col)const; //判断位置(row,col)是否安全
void PlaceQueen(int row); //在第row行放置一个皇后
private:
int chessState[8][8]; //用于存放棋盘状态
int sum; //八个皇后放置成功的棋盘解的总个数
};
QueenChess::QueenChess()
{
sum=0;
int i=0,j=0;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
chessState[i][j]=0;
sysSum++;
}
sysSum++;
}
}
//求解八皇后问题能放置成功的棋盘总个数
void QueenChess::Solve()
{
//从第0行开始放置皇后
PlaceQueen(0);
cout<<"八皇后问题总共的解的个数是:"<<sum;
cout<<endl;
}
//在第row行的各列放置皇后
void QueenChess::PlaceQueen(int row)
{
for(int col=0;col<8;col++)
{
if(SafeJudge(row,col))
{
chessState[row][col]=1;
if(row<7)
PlaceQueen(row+1);
else
{
sum++;
}
}
sysSum++;
}
int i=0;
for(i=0;i<8;i++)
{
chessState[row][i]=0;
sysSum++;
}
}
//判断是否(row,col)是安全位置
bool QueenChess::SafeJudge(int row,int col)const
{
int qRow,qCol;
int i;
//检查前面各行,看与前面的皇后是否发生冲突
for(qRow=0;qRow<row;qRow++)
{
for(i=0;i<8;i++)
{
if(chessState[qRow][i]==1)
{
qCol=i;
//break;
}
sysSum++;
}
//如果两个皇后在同一行、同一列或两条对角线上,则说明该位置不安全
if(qRow==row||qCol==col||(qCol-qRow)==(col-row)||(qCol+qRow)==(col+row))
return false;
sysSum++;
}
return true;
}
效率不高,抛砖引玉了
int main()
{
QueenChess chess;
chess.Solve();
printf("%d\n",sysSum);
getch();
return 0;
}
hch2205
2010-03-17
打赏
举报
回复
很多书上都有八皇后的算法
ypb362148418
2010-03-17
打赏
举报
回复
编程之美上好像有八皇后的算法,找找看吧
数据结构与
算法
之
算法
篇
文章目录大O
算法
时间复杂度空间复杂度 大O
算法
时间复杂度 在长度为n的数组中: 直接通过下标去访问元素,时间复杂度为O(1)。 需要遍历查找元素的时候,时间复杂度为O(n)。 需要遍历二维数组的时候,时间复杂度为O(n...
【LeetCode刷题日记】常用
算法
基础和理解及运用
文章目录递归和迭代递归迭代迭代和递归的关系和区别(敲黑板)二分法典型的二分法二分法的
变种
找出第一个与key相等的元素的位置找出最后一个与key相等的元素的位置查找第一个等于或者大于Key的元素的位置查找第一个...
算法
设计与实现小结
算法
设计主要讲了什么? 1. 基础的排序包含插入、冒泡、快排等。(提供给他自己会的信息) 2. 编程思想: a. 分治法 b. 动态规划 c. 贪心 d. 回溯(不会) e. 分支界限(不会) 插入实现: 维护...
写在前面-数据结构与
算法
分析
这两天开始翻数据结构和
算法
,这里写一下大概的复习计划。 为什么要学
算法
其实严格来讲,解决问题的方法,基本都会涉及
算法
。但是我们讲
算法
,其实很多时候是追求更高的目标。学习之前,我们会达成一些共识。 1....
【LeetCode刷题日记】常用
算法
基础和理解及运用_cw(->;a^ ^";f
最后输出结果是:很多的时候,应用二分检索的地方都不是直接的查找和key相等的元素,而是使用上面提到的二分检索的各个
变种
,熟练掌握了这些
变种
,当你再次使用二分检索的检索的时候就会感觉的更加的得心应手了。...
C语言
70,034
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章