ZOJ1002 Fire Net
阿新 • • 發佈:2018-12-11
#include<stdio.h> #define true 1 #define false 0 char map[4][4]; int vis[4][4]; int max,count; int n; int is_ok(int a,int b) { if(map[a][b]=='X') return false; if(vis[a][b]==1) return false; int i,j; i=a,j=b; j++; while(j<n&&map[i][j]!='X') { if(vis[i][j]==1) return false; j++; } i=a,j=b; j--; while(j>=0&&map[i][j]!='X') { if(vis[i][j]==1) return false; j--; } i=a,j=b; i++; while(i<n&&map[i][j]!='X') { if(vis[i][j]==1) return false; i++; } i=a,j=b; i--; while(i>=0&&map[i][j]!='X') { if(vis[i][j]==1) return false; i--; } return true; } void shuaxin_max() { if(max<count) max=count; } void dfs(int a,int b) { if(is_ok(a,b)==true) { vis[a][b]=1; int temp=++count; shuaxin_max(); int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i!=a&&j!=b) { dfs(i,j); count=temp; } } } vis[a][b]=0; } } int main(void) { while(scanf("%d",&n)!=EOF && n!=0) { getchar(); int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%c",&map[i][j]); vis[i][j]=0; } getchar(); } max=count=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { count=0; dfs(i,j); } } printf("%d\n",max); } }