usaco 2.1.1 castle
2016-02-13 16:17
507 查看
/* ID: cm750621 PROG: castle LANG: C++ */ #include<cstdio> #include<cstring> int castle[54][54][4],vis[54][54],wall[3]; int s,size[2501]; int big=1,max,k=1,large; void DFS(int x,int y){ if(!castle[x][y][1]) return ; castle[x][y][1]=0; castle[x][y][2]=size[big]; if(castle[x][y][0]==1){ DFS(x+1,y);DFS(x-1,y);DFS(x,y+1); } if(castle[x][y][0]==2){ DFS(x,y-1);DFS(x,y+1);DFS(x+1,y); } if(castle[x][y][0]==3){ DFS(x,y+1);DFS(x+1,y); } if(castle[x][y][0]==4){ DFS(x-1,y);DFS(x,y-1);DFS(x+1,y); } if(castle[x][y][0]==5){ DFS(x-1,y);DFS(x+1,y); } if(castle[x][y][0]==6){ DFS(x,y-1);DFS(x+1,y); } if(castle[x][y][0]==7){ DFS(x+1,y); } if(castle[x][y][0]==8){ DFS(x,y-1);DFS(x,y+1);DFS(x-1,y); } if(castle[x][y][0]==9){ DFS(x-1,y);DFS(x,y+1); } if(castle[x][y][0]==10){ DFS(x,y-1);DFS(x,y+1); } if(castle[x][y][0]==11){ DFS(x,y+1); } if(castle[x][y][0]==12){ DFS(x,y-1);DFS(x-1,y); } if(castle[x][y][0]==13){ DFS(x-1,y); } if(castle[x][y][0]==14){ DFS(x,y-1); } if(castle[x][y][0]==15) return ; if(castle[x][y][0]==0){ DFS(x,y-1);DFS(x,y+1);DFS(x-1,y);DFS(x+1,y); } return ; } void dfs(int x,int y){ if(vis[x][y]==1) return ; castle[x][y][1]=1; large++; vis[x][y]=1; castle[x][y][3]=k; if(castle[x][y][0]==1){ dfs(x+1,y);dfs(x-1,y);dfs(x,y+1); } if(castle[x][y][0]==2){ dfs(x,y-1);dfs(x,y+1);dfs(x+1,y); } if(castle[x][y][0]==3){ dfs(x,y+1);dfs(x+1,y); } if(castle[x][y][0]==4){ dfs(x-1,y);dfs(x,y-1);dfs(x+1,y); } if(castle[x][y][0]==5){ dfs(x-1,y);dfs(x+1,y); } if(castle[x][y][0]==6){ dfs(x,y-1);dfs(x+1,y); } if(castle[x][y][0]==7){ dfs(x+1,y); } if(castle[x][y][0]==8){ dfs(x,y-1);dfs(x,y+1);dfs(x-1,y); } if(castle[x][y][0]==9){ dfs(x-1,y);dfs(x,y+1); } if(castle[x][y][0]==10){ dfs(x,y-1);dfs(x,y+1); } if(castle[x][y][0]==11){ dfs(x,y+1); } if(castle[x][y][0]==12){ dfs(x,y-1);dfs(x-1,y); } if(castle[x][y][0]==13){ dfs(x-1,y); } if(castle[x][y][0]==14){ dfs(x,y-1); } if(castle[x][y][0]==15) return ; if(castle[x][y][0]==0){ dfs(x,y-1);dfs(x,y+1);dfs(x-1,y);dfs(x+1,y); } return ; } int i,j,m,n,a,b,c; int main(){ freopen("castle.in", "r", stdin); freopen("castle.out", "w", stdout); scanf("%d%d",&m,&n); for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&castle[i][j][0]); for(i=1;i<=n;i++) for(j=1;j<=m;j++){ if(!vis[i][j]){ s++; dfs(i,j); k++; size[big]=large; large=0; DFS(i,j); if(size[big]>max) max=size[big]; big++; } } for(j=1;j<=m;j++) for(i=n;i>=1;i--){ if(i>1&&castle[i][j][3]!=castle[i-1][j][3]&&a<castle[i][j][2]+castle[i-1][j][2]){ a=castle[i][j][2]+castle[i-1][j][2]; wall[0]=i; wall[1]=j; wall[2]='N'; } if(j<m&&castle[i][j][3]!=castle[i][j+1][3]&&a<castle[i][j][2]+castle[i][j+1][2]){ a=castle[i][j][2]+castle[i][j+1][2]; wall[0]=i; wall[1]=j; wall[2]='E'; } } printf("%d\n%d\n",s,max); printf("%d\n%d %d %c\n",a,wall[0],wall[1],wall[2]); return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性