poj 1321 棋盘问题

题目:

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 }

 

posted @ 2013-08-08 14:37  小の泽  阅读(126)  评论(0编辑  收藏  举报