有用C写的 含有putchess函数的八皇后问题的程序? 带注释的
答案:1 悬赏:0 手机版
解决时间 2021-02-26 13:24
- 提问者网友:遮云壑
- 2021-02-26 04:35
有用C写的 含有putchess函数的八皇后问题的程序? 带注释的
最佳答案
- 五星知识达人网友:慢性怪人
- 2021-02-26 05:32
提示:在国际象棋上放置皇后时,任何一个皇后的水平、竖直和斜45º都不能有另一个皇后。解决该问题采用逐次试探的方法,即采用递归调用putchess函数的方法。首先将第一个皇后放于第一行第一列,然后开始向下一行递归。每一步递归中,首先检测待放置位置是否与已放置的皇后冲突,如不冲突,则进行下一行的放置,否则,选择该行的下一个位置进行检测。如整行的位置都冲突,则回到上一行,重新选择位置
#include
#include
#define MAX 8 //棋子数及棋盘大小MAXxMAX
int result[MAX],count=0;
int chess_cross(int n)//判断是否可放置
{
int i;
for(i=0;i {
if(result[i] == result[n] || n-i == abs(result[n] - result[i]))//斜率等于1
return 1;
}
return 0;
}
void show_result()//打印符合要求的组合
{
int i;
for(i=0;i printf("(%d,%d)",i,result[i]);
printf("\n");
count++;
}
void put_chess(int n)//放置棋子到棋盘上
{
int i;
for(i=0;i {
result[n] = i;
if(!chess_cross(n))//有没有符合要求的
{
if(n == MAX -1)
show_result();
else
put_chess(n+1);
}
}
}
int main()
{
put_chess(0);
printf("一共有%d种可能!\n",count);
}
#include
#include
#define MAX 8 //棋子数及棋盘大小MAXxMAX
int result[MAX],count=0;
int chess_cross(int n)//判断是否可放置
{
int i;
for(i=0;i
if(result[i] == result[n] || n-i == abs(result[n] - result[i]))//斜率等于1
return 1;
}
return 0;
}
void show_result()//打印符合要求的组合
{
int i;
for(i=0;i
printf("\n");
count++;
}
void put_chess(int n)//放置棋子到棋盘上
{
int i;
for(i=0;i
result[n] = i;
if(!chess_cross(n))//有没有符合要求的
{
if(n == MAX -1)
show_result();
else
put_chess(n+1);
}
}
}
int main()
{
put_chess(0);
printf("一共有%d种可能!\n",count);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯