百练 oj 2754 八皇后问题

来源:互联网 发布:h5电商源码 编辑:程序博客网 时间:2024/05/17 04:39
题目地址


http://bailian.openjudge.cn/practice/2754

这个题用的是深搜 ,回溯法的应用。注意判断对角线之前是否存在皇后的方法。

#include<stdio.h>#include<string.h>#include<stdbool.h>int i,j,n,m,num,a[10],b[100][10];bool f[3][50];int pre(){     memset(f,1,sizeof(f));     memset(a,0,sizeof(a));     memset(b,0,sizeof(b));     num=0;     return 0;}void dfs(int x) {     int i;     if(x==9)     {         num++;         for(i=1;i<=8;i++)         b[num][i]=a[i];     }     for(i=1;i<=8;i++)     if (f[0][i]&&f[1][x+i]&&f[2][x-i+8])     {         a[x]=i;         f[0][i]=f[1][x+i]=f[2][x-i+8]=0;         dfs(x+1);         f[0][i]=f[1][x+i]=f[2][x-i+8]=1;     }}int main() {     int cas,i;     scanf("%d",&cas);     pre();     dfs(1);     while(cas--)     {         scanf("%d",&n);         for(i=1;i<=8;i++)         printf("%d",b[n][i]);         printf("\n");     }     return 0; }

0 0