poj 1321 棋盘问题(dfs)

题目:http://poj.org/problem?id=1321

没什么难度,比较水。。。

View Code
 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define pan(a,n) (a>=1&&a<=n)
 5 using namespace std;
 6 int n,k;
 7 char str[10][10];
 8 int dire[4][2]={{1,0},{0,1}};
 9 int xvis[10],yvis[10];
10 int num;
11 void dfs(int ax,int ay,int k)
12 {
13     if(k==0)
14     {
15         num++;
16         return ;
17     }
18     int i,j;
19     for(i=ax+1;i<=n;i++)
20     {
21         for(j=1;j<=n;j++)
22         {
23             if(str[i][j]=='#')
24             {
25                 if(xvis[i]==0&&yvis[j]==0)
26                 {
27                     xvis[i]=1;
28                     yvis[j]=1;
29                     k--;
30                     dfs(i,j,k);
31                     k++;
32                     xvis[i]=0;
33                     yvis[j]=0;
34                 }
35             }
36         }
37     }
38 }
39 int main()
40 {
41     int i,j;
42     while(scanf("%d%d",&n,&k)!=EOF)
43     {
44         if(n==-1&&k==-1)
45         break;
46         num=0;
47         memset(xvis,0,sizeof(xvis));
48         memset(yvis,0,sizeof(yvis));
49         for(i=1;i<=n;i++)
50         {
51             for(j=1;j<=n;j++)
52             {
53                 cin>>str[i][j];
54             }
55         }
56         for(i=1;i<=n;i++)
57         {
58             for(j=1;j<=n;j++)
59             {
60                 if(str[i][j]=='#')
61                 {
62                     xvis[i]=1;
63                     yvis[j]=1;
64                     k--;
65                     dfs(i,j,k);
66                     k++;
67                     xvis[i]=0;
68                     yvis[j]=0;
69                 }
70             }
71         }
72         cout<<num<<endl;
73     }
74     return 0;
75 }

 

posted @ 2013-01-26 13:53  琳&leen  阅读(149)  评论(0编辑  收藏  举报