题目:
http://poj.org/problem?id=1321
八皇后问题,用dfsj即可。
源代码:
1 #include <iostream> 2 #include<stdio.h> 3 #include<cstring> 4 using namespace std; 5 int a[10][10]; 6 int visit[10]; 7 int n,k,sum; 8 __int64 ans; 9 10 void dfs(int x){ 11 int i,j; 12 for(i=x+1;i<n;i++) 13 for(j=0;j<n;j++){ 14 if(a[i][j]&&visit[j]==0){ 15 visit[j]=1; 16 sum++; 17 if(sum==k){ 18 ans++; 19 } 20 else dfs(i); 21 sum--; 22 visit[j]=0; 23 } 24 } 25 } 26 int main() 27 { char ch; 28 int i,j; 29 while(scanf("%d %d",&n,&k)){ 30 if(n==-1&&k==-1) break; 31 memset(visit,0,sizeof(visit)); 32 ans=0; 33 for(i=0;i<n;i++){ 34 getchar(); 35 for(j=0;j<n;j++){ 36 scanf("%c",&ch); 37 if(ch=='#') 38 a[i][j]=1; 39 else a[i][j]=0; 40 } 41 } 42 for(i=0;i<=n-k;i++) 43 for(j=0;j<n;j++){ 44 if(a[i][j]){ 45 visit[j]=1; 46 sum=1; 47 if(k==1){ 48 ans++; 49 } 50 else { 51 dfs(i); 52 }visit[j]=0; 53 54 sum--; 55 } 56 } 57 printf("%I64d\n",ans); 58 } 59 return 0; 60 }