C语言中的8皇后问题。

来源:互联网 发布:sha256算法详细 编辑:程序博客网 时间:2024/05/14 21:49

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);}