社区
C语言
帖子详情
算法PK系列(2)-- 八皇后变种
r11222
2010-03-17 03:05:12
大家都知道,八皇后是把 8 个皇后放在 8*8 的棋盘
现在的问题变成,N个 (N<=8) 皇后,放入8*8的棋盘,输出所有可能的方法!(就是所有皇后不能互相攻击,不清楚规制的请百度)
例如
N=2,
就是两个皇后放在8*8 的棋盘,输出 所有可能
最重要是高效! 高效!!高效!!!!!!!!
大家都来发表意见吧,哈哈!!
分数不多,惭愧了
...全文
205
15
打赏
收藏
算法PK系列(2)-- 八皇后变种
大家都知道,八皇后是把 8 个皇后放在 8*8 的棋盘 现在的问题变成,N个 (N<=8) 皇后,放入8*8的棋盘,输出所有可能的方法!(就是所有皇后不能互相攻击,不清楚规制的请百度) 例如 N=2, 就是两个皇后放在8*8 的棋盘,输出 所有可能 最重要是高效! 高效!!高效!!!!!!!! 大家都来发表意见吧,哈哈!! 分数不多,惭愧了
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
编程之美上好像有八皇后的算法,找找看吧
算法
技术手册 - 中文版
《
算法
技术手册》内容简介:开发健壮的软件需要高效的
算法
,然后程序员们往往直至问题发生之时,才会去求助于
算法
。《
算法
技术手册》讲解了许多现有的
算法
,可用于解决各种问题。通过阅读它,可以使您学会如何选择和...
完整视频-coursera公开课 普林斯顿
算法
ⅠⅡ部分
相关主题有:深度优先搜索,宽度优先搜索,拓扑排序,Kosaraju-Sharir
算法
,Kruskal
算法
,Prim
算法
,Dijkistra
算法
,Bellman-Ford
算法
, Ford-Fulkerson
算法
, LSD radix sort
算法
, MSD radix sort
算法
, 3-way radix ...
java数百种
算法
实现
-
八皇后
问题:在一个8x8的棋盘上放置8个皇后,使得任意两个皇后都不在同一行、同一列或同一对角线上。 - 图着色问题:给图的每个节点分配颜色,使得相邻节点颜色不同。 7. 贪心
算法
: - Kruskal's最小生成树...
CRC-16 和 CRC-32
算法
CRC-16 和 CRC-32
算法
的汇编源代码
几个推荐
算法
的java实现
2. **SVD (奇异值分解)**: - 奇异值分解是矩阵分解的一种方法,广泛用于推荐系统中。它将用户-物品评分矩阵分解为三个矩阵的乘积:U * Σ * V^T,其中U和V是正交矩阵,Σ是对角矩阵,包含了主要的信息。 - 在Java...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章