题目:http://acm.hdu.edu.cn/showproblem.php?pid=2553
dfs的题
1 #include<iostream> 2 #include<stdio.h> 3 #include<math.h> 4 #include<stdlib.h> 5 #include<string.h> 6 using namespace std; 7 const int N=20; 8 int n; 9 int count; 10 int a[N]; 11 int visit[N]; 12 int check(int i,int j)//验证第i行j列 13 { 14 int k; 15 int flag=1; 16 for(k=1;k<i;k++) 17 { 18 if( abs(k-i) == abs(j-a[k]) ) 19 flag=0; 20 } 21 return flag; 22 } 23 24 void dfs(int i) 25 { 26 if(i>n) 27 count++; 28 else 29 { 30 int j; 31 for(j=1;j<=n;j++) 32 { 33 if(visit[j]==0 && check(i,j)) 34 { 35 a[i]=j; 36 visit[j]=1; 37 dfs(i+1); 38 visit[j]=0; 39 } 40 } 41 } 42 } 43 44 int main() 45 { 46 //freopen("in.txt","r",stdin); 47 int b[15]; 48 memset(b,0,sizeof(b)); 49 int i; 50 count=0; 51 for(i=1;i<=10;i++) 52 { 53 n=i; 54 memset(a,0,sizeof(a)); 55 memset(visit,0,sizeof(visit)); 56 dfs(1); 57 b[i]=count; 58 //printf("%d ",b[i]); 59 count=0; 60 } 61 int m; 62 while(~scanf("%d",&m)) 63 { 64 if(m==0) 65 break; 66 printf("%d\n",b[m]); 67 } 68 return 0; 69 }
原文:http://www.cnblogs.com/xuesen1995/p/4374186.html