hdu 2553(N皇后)

来源:互联网 发布:外交官 新秀丽 知乎 编辑:程序博客网 时间:2024/05/17 08:26

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553

哎,不说了,打表过的,直接搜的话,TLE..

View Code
 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 //#define MAXN 22 6 //int num[MAXN]; 7 //bool mark[3][MAXN]; 8 int sum,n; 9 10 /*11 void dfs(int row){12     if(row==n+1)sum++;13     for(int i=1;i<=n;i++){14         bool flag=true;15         num[row]=i;//存当前行的列号16         for(int j=1;j<row;j++){17             //判断列、主对角线、副对角线是否冲突18             if(num[j]==num[row]||row-num[row]==j-num[j]||row+num[row]==j+num[j]){19                 flag=false;20                 break;21             }22         }23         if(flag)dfs(row+1);//此时,前row行都不冲突24     }25 }26 */27 28 29 /*30 void dfs(int row){31     if(row==n+1)sum++;32     for(int i=1;i<=n;i++){33         if(!mark[0][i]&&!mark[1][row+i]&&!mark[2][row-i+n]){34             mark[0][i]=mark[1][row+i]=mark[2][row-i+n]=true;35             dfs(row+1);36             mark[0][i]=mark[1][row+i]=mark[2][row-i+n]=false;37         }38     }39 }40 */41 42 43 int main(){44     int ans[]={0,1,0,0,2,10,4,40,92,352,724};45     while(~scanf("%d",&n)&&n){46     //    memset(num,0,sizeof(num));47     //    memset(mark,false,sizeof(mark));48     //    sum=0;49     //    dfs(1);50     //    printf("%d\n",sum);51         printf("%d\n",ans[n]);52     }53     return 0;54 }55 56         

 

0 0