八皇后问题

来源:互联网 发布:mac系统突然很卡 编辑:程序博客网 时间:2024/04/29 01:52

8皇后问题

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

描述:

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

输入:

没有输入。

输出:

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

输入样例:

输出样例:

输出的前几行:No 1:A...........A..........A.....A....A...........A..A.........A....No 2:A............A.........A..A...........A....A.....A..........A...

来源:

#include<stdio.h>#include<math.h>#define true 1#define false 0int n=8;int x[9];int sum=1;int place(int k){    int i;    for(i=1;i<k;i++)    {           //判断皇后不同列以及不在同一条斜线上            if(abs(k-i)==abs(x[k]-x[i]) || x[i]==x[k])            return false;    }    return true;}void backtrack(int k){    int i,j;    if(k>n)    {        printf("No %d:",sum++);        printf("\n");        for(i=1;i<=n;i++)        {            for(j=1;j<=n;j++)            {                if(x[i]==j)                    printf("A");                else printf(".");            }            printf("\n");        }        return ;    }    for(i=1;i<=n;i++)    {        x[k]=i;        if(place(k))            backtrack(k+1);    }}int main(){    backtrack(1);    return 0;}

1 0