哥哥们好!大家给个八皇后枚举算法的解答啊!

woshuo 2004-10-06 05:01:57
如题!
...全文
208 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
挺拔的劲松 2004-10-07
  • 打赏
  • 举报
回复
/****************************************************************************************/
/* 问题: 在8×8的国际象棋棋盘上放置8个皇后,要求任意两个皇后不能在同一行、同一列或同一条对角线上。 */
/* 递归回溯法求解8皇后问题。sdp*/
/************************************************************************/
#include <stdio.h >
#include <conio.h >
#include <math.h >
#define QUEENS 8
int iCount = 0;
int Site[QUEENS];
void Queen(int n)/*递归放置第n个皇后*/
{
int i;
if(n == QUEENS)
{
Output();
return;
}
for(i = 1 ; i <= QUEENS ; i++)
{
Site[n] = i;
if(IsValid(n))
Queen(n + 1);
}
}
int IsValid(int n)/*判断第n个皇后放上去之后,是否无冲突。*/
{
int i;
for(i = 0 ; i < n ; i++)
{
if(Site[i] == Site[n])
return 0;
if(abs(Site[i] - Site[n]) == (n - i))
return 0;
}
return 1;
}
void Output()/*输出一个解*/
{
int i;
printf( "No.%-5d " , ++iCount);
for(i = 0 ; i < QUEENS ; i++)
printf( "%d " , Site[i]);
printf( "\n ");

}
void main()
{
Queen(0);
getch();
}

woshuo 2004-10-06
  • 打赏
  • 举报
回复
那大家能不能给个回溯算法的解答啊?
要c的!不要C++的!
chenminyi 2004-10-06
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3406/3406858.xml?temp=.6167108
我验证答案不对,不过别人说是对的!
比较怪的一个解法!
pcyy 2004-10-06
  • 打赏
  • 举报
回复
up
cnxiaohai 2004-10-06
  • 打赏
  • 举报
回复
不是吧

求枚举算法?

那就8个FOR好了

这个题目所有书上的经典解法都是回溯啊。。。。。。。。。。。。。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧