您的位置:首页 > 编程语言 > C语言/C++

C语言中的8皇后问题。

2017-10-31 10:22 239 查看
8皇后问题

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

输出8皇后问题所有结果。

输入:

没有输入。

输出:

每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。

#include<stdio.h>
static int a[8]={0};
static int cnt=0;
int judge(int m,int c)//判断每种情况是否符合8皇后问题要求
{
for(int i=0;i<m;i++)
{
if(a[i]==c) return 0;
if((c-a[i])==(m-i)||(c-a[i])==(i-m)) return 0;
}
return 1;
}
int print(int a[8],int cnt)//输出函数
{
int i,j;
printf("No %d:\n",cnt);
for(i=0;i<=7;i++)
{
for(j=0;j<=7;j++)
{
if(j==a[i])printf("A");
if(j!=a[i])printf(".");
if(j==7)printf("\n");
}
}
}
int search(int m)//回溯算法递归调用函数,枚举所有可能。
{
int i;
if(judge(m-1,a[m-1])==0) return 1;//调用judge函数,判断刚刚加入的皇后是否符合要求。符合则继续讨论下一行或者输出,不符合则返回讨论上一行的下一种情况。
if(m==8)
{
cnt++;
print(a,cnt);//前8行符合要求则输出
}
if(m<=7)
{
for(i=0;i<8;i++)
{
a[m]=i;
search(m+1);
}
}
}
int main()
{
search(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息