首页 > 代码库 > [USACO2.1.1]The Castle城堡
[USACO2.1.1]The Castle城堡
还以为要打很长呢。
1 #include<cstdio> 2 #define N 51 3 #define repu(i,x,y) for(i=x;i<=y;i++) 4 #define max(a,b) (a>b?a:b) 5 int n,m,a[N][N],f[N][N],x=0,s[N*N]; 6 int dfs(int x,int y,int t) { 7 f[x][y]=t; int i,j,k=4,s=1; 8 if (!(a[x][y]&1) && y>1 && !f[x][y-1]) s+=dfs(x,y-1,t); 9 if (!(a[x][y]&2) && x>1 && !f[x-1][y]) s+=dfs(x-1,y,t); 10 if (!(a[x][y]&4) && y<m && !f[x][y+1]) s+=dfs(x,y+1,t); 11 if (!(a[x][y]&8) && x<n && !f[x+1][y]) s+=dfs(x+1,y,t); 12 return s; 13 } 14 int main() { 15 int i,j,k,l,t,ans=0; scanf("%d%d",&m,&n); 16 repu(i,1,n) 17 repu(j,1,m) 18 scanf("%d",&a[i][j]); 19 repu(i,1,n) 20 repu(j,1,m) 21 if (!f[i][j]) 22 ++x,s[x]=dfs(i,j,x),ans=max(ans,s[x]); 23 printf("%d\n%d\n",x,ans); ans=0; 24 for (j=1;j<=m;j++) 25 for (i=n;i>=1;i--) { 26 if (f[i][j]!=f[i-1][j]) 27 if (s[f[i][j]]+s[f[i-1][j]]>ans) 28 ans=s[f[i][j]]+s[f[i-1][j]],k=i,l=j,t=1; 29 if (f[i][j]!=f[i][j+1]) 30 if (s[f[i][j]]+s[f[i][j+1]]>ans) 31 ans=s[f[i][j]]+s[f[i][j+1]],k=i,l=j,t=0; 32 } 33 printf("%d\n%d %d %c\n",ans,k,l,t?‘N‘:‘E‘); 34 }
[USACO2.1.1]The Castle城堡
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。