c语言八皇后

c语言八皇后,第1张

这是经典题目,答案网上有的是,抄一个学学就可以了:

回溯法进行求解,程序实现如下:

#include<stdio.h>

#define Queens 8 //定义结果数组的大小,也就是皇后的数目

int a[Queens+1] //八皇后问题的皇后所在的行列位置,从1开始算起,所以加1

int main(){

int i, k, flag, not_finish=1, count=0

//正在处理的元素下标,表示前i-1个元素已符合要求,正在处理第i个元素

i=1

a[1]=1 //为数组的第一个元素赋初值

printf("The possible configuration of 8 queens are:\n"棚雀行)

while(not_finish){ //not_finish=l:处理尚未结束

while(not_finish &&i<=Queens){ //处理尚未结束且还没处理到第Queens个元素

for(flag=1,k=1flag &&k<ik++) //判断是否有多个皇后在同一行

if(a[k]==a[i])

flag=0

for (k=1flag&&k<ik++) //判断是否有多个皇后在同一对角线

if( (a[i]==a[k]-(k-i)) || (a[i]==a[k]+(k-i)) )

flag=0

if(!flag){ //若存在矛盾不满足要求,需要重新设置第i个元素

if(a[i]==a[i-1]){ //若a[i]的值已经经过一圈追上a[i-1]的值

i-- //退回一步,重新试探处理前一个元素

if(i>1 &&a[i]==Queens)

a[i]=1 //当a[i]为Queens时将a[i]的值置1

else

if(i==1 &&a[i]==Queens)

not_finish=0 //当第一位的值达到Queens时结束

else

a[i]++ //将a[il的值取下一个值

}else if(a[i] == Queens)

a[i]=1

else

a[i]++ //将a[i]的值取下一个值

}else if(++i<=Queens)

if(a[i-1] == Queens )

a[i]=1 //若前一个元素的值为Queens则a[i]=l

else

a[i] = a[i-1]+1 //否则元素的值为前一个元素的岁备下一个值

}

if(not_finish){

++count

printf((count-1)%3 ? "链哗\t[%2d]:" : "\n[%2d]:", count)

for(k=1k<=Queensk++) //输出结果

printf(" %d", a[k])

if(a[Queens-1]<Queens )

a[Queens-1]++ //修改倒数第二位的值

else

a[Queens-1]=1

i=Queens -1 //开始寻找下一个满足条件的解

}

}

#include "stdio.h" \x0d\x0a#include "windows.h" \x0d\x0a#define N 8 /* 定义棋盘大小 */ \x0d\x0aint place(int k)/* 确定某一位置皇后放置与否,放置则返回1,反之返回0 */ \x0d\x0avoid backtrack(int i)/* 主递归函数,搜索解空间中第i层子树 */ \x0d\x0avoid chessboard()/* 每找到一个解,打印当前棋盘状态 */ \x0d\x0astatic int sum, /* 当前已找到解的个数 */ \x0d\x0ax[N]/* 记录皇后的位置,x[i]表示皇后i放在棋盘的第i行的第x[i]列 */虚衫 \x0d\x0aint main(void) \x0d\x0a{ \x0d\x0abacktrack(0)\x0d\x0asystem("pause")\x0d\x0areturn 0\x0d\x0a} \x0d\x0aint place(int k) \x0d\x0a{ \x0d\x0a/* 测试皇后k在第k行第x[k]列时是否与前面已放置好的皇后相攻击。 x[j] == */ \x0d\x0a/* x[k] 时,两皇后在同一列上;abs(k - j) == abs(x[j] - x[k]) 时,两皇 */差伏腔 \x0d\x0a/* 后在同一斜线上。两种情况两皇后都可相互攻击,故返回0表示不符合条件。*/ \x0d\x0afor (int j = 0j 回答于 2022-12-11


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12363179.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存