1002 Fire Net

用递归实现各种情况的枚举,可以看做是考察DPS的简单实现。

 1 #include <stdio.h>
 2 
 3 int n,max,count,target[4][4];
 4 
 5 int place(int x,int y){
 6     int i;
 7     for(i=y;i>=0;i--){
 8         if(target[x][i]>0)
 9             return 0;
10         if(target[x][i]<0)
11             break;
12     }
13     for(i=y;i<n;i++){
14         if(target[x][i]>0)
15             return 0;
16         if(target[x][i]<0)
17             break;
18     }
19     for(i=x;i>=0;i--){
20         if(target[i][y]>0)
21             return 0;
22         if(target[i][y]<0)
23             break;
24     }
25     for(i=x;i<n;i++){
26         if(target[i][y]>0)
27             return 0;
28         if(target[i][y]<0)
29             break;
30     }
31     return 1;
32 }
33 
34 void DFS(){
35     int i,j;
36     if(count>max)
37         max=count;
38     for(i=0;i<n;i++){
39         for(j=0;j<n;j++){
40             if(!target[i][j]&&place(i,j)){
41                 target[i][j]=1;
42                 count++;
43                 DFS();
44                 count--;
45                 target[i][j]=0;
46             }
47         }
48     }
49 }
50 
51 int main(){
52     int i,j;
53     char c;
54     while(1){
55         scanf("%d",&n);
56         if(n==0)
57             break;
58         max=count=0;
59         for(i=0;i<n;i++){
60             getchar();
61             for(j=0;j<n;j++){
62                 scanf("%c",&c);
63                 target[i][j]=(c==X?-1:0);
64             }
65         }
66         DFS();
67         printf("%d\n",max);
68     }
69     return 0;
70 }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。