HDU 1045 - Fire Net
水水的dfs
又写出无脑的判断了..
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 char map[5][5]; 6 int n,ans; 7 int vis[5][5]; 8 void dfs(int x,int cnt) 9 { 10 if(x==n){ 11 if(ans<cnt) ans=cnt; 12 return ; 13 } 14 for(int i=0;i<n;++i) 15 { 16 if(!vis[x][i]&&map[x][i]=='.') 17 { 18 int j; 19 for(j=x;j>=0;--j){ 20 if(map[j][i]=='X') break; 21 ++vis[j][i]; 22 } 23 for(j=x+1;j<n;++j){ 24 if(map[j][i]=='X') break; 25 ++vis[j][i]; 26 } 27 for(j=i-1;j>=0;--j){ 28 if(map[x][j]=='X') break; 29 ++vis[x][j]; 30 } 31 for(j=i+1;j<n;++j){ 32 if(map[x][j]=='X') break; 33 ++vis[x][j]; 34 } 35 dfs(x,cnt+1); 36 for(j=x;j>=0;--j){ 37 if(map[j][i]=='X') break; 38 --vis[j][i]; 39 } 40 for(j=x+1;j<n;++j){ 41 if(map[j][i]=='X') break; 42 --vis[j][i]; 43 } 44 for(j=i-1;j>=0;--j){ 45 if(map[x][j]=='X') break; 46 --vis[x][j]; 47 } 48 for(j=i+1;j<n;++j){ 49 if(map[x][j]=='X') break; 50 --vis[x][j]; 51 } 52 } 53 } 54 dfs(x+1,cnt); 55 } 56 int main() 57 { 58 while(~scanf("%d",&n)&&n) 59 { 60 for(int i=0;i<n;i++) scanf("%s",map[i]); 61 memset(vis,0,sizeof(vis)); 62 ans=0; 63 dfs(0,0); 64 printf("%d\n",ans); 65 } 66 }
我自倾杯,君且随意