社区
C语言
帖子详情
算法PK系列(2)-- 八皇后变种
r11222
2010-03-17 03:05:12
大家都知道,八皇后是把 8 个皇后放在 8*8 的棋盘
现在的问题变成,N个 (N<=8) 皇后,放入8*8的棋盘,输出所有可能的方法!(就是所有皇后不能互相攻击,不清楚规制的请百度)
例如
N=2,
就是两个皇后放在8*8 的棋盘,输出 所有可能
最重要是高效! 高效!!高效!!!!!!!!
大家都来发表意见吧,哈哈!!
分数不多,惭愧了
...全文
198
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
打赏
举报
回复
编程之美上好像有八皇后的算法,找找看吧
Java实现数据结构中的
算法
------第一讲 顺序表
使用java语言来实现数据结构中涉及到的
算法
,并针对每个
算法
搭配习题进行实现。
大白话EM
算法
--从此爱上EM迭代
目录如下: 1.1EM
算法
之回顾最大似然估计 1.2EM
算法
之回顾贝叶斯估计 1.3EM
算法
之回顾K-means
算法
1.4EM
算法
之
算法
目标引入 1.5EM
算法
之目标函数转换--利用Jensen不等式 1.6EM
算法
之目标函数求解--关于Q(z, θ)的...
Python
算法
实战视频课程--二叉树
二叉树是重要的抽象数据类型,解决很多问题时都需要它。通过本课我们学习这种重要的数据结构,本课注重实践,没有过多枯燥的理论,我们的重点放在编码实现各种
算法
,这对于熟练使用Python语言也是很有益处的。
Python
算法
实战视频课程--图
图是程序设计中被广泛使用的数据结构, 它比栈,队列,树更复杂. 图是对实际问题进行数学...本套课程我们学习图的基本概念,常用接口, 以及如何在python中使用图, 图的基本
算法
, 后以几个经典问题体会图在实际问题中的应用.
Python
算法
实战视频课程--队列的应用
队列是程序设计中被广泛使用的数据结构, 很多问题都满足队列"先进先出"的特性(例如, 广度有限搜索), 本课程以实际应用为主, 先了解队列的基本特性, 操作接口以及学习使用python标准库中的deque, 以多个编程实例带领...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章