hdu1198 Farm Irrigation DFS
2015-05-19 20:47
253 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1198
核心思想是dfs,非常简单,一个地和另一个地在邻边上都有水道即连通,用标记求出连通子图数量即可。
但是题目故意出出来恶心死人
对于这样的题目,a了没意思,你还得写的最短,才算是过,对不对。
我们把题目中的几个样式图都存到数组里去,存的方式是一个图对应4个bool变量,分别是上下左右是否有管道
记得把0位置留给没有任何管道的图,我们把这个要求的图的周围都填上这种没有任何管道的图(通过memset),就不用管边界了。
核心思想是dfs,非常简单,一个地和另一个地在邻边上都有水道即连通,用标记求出连通子图数量即可。
但是题目故意出出来恶心死人
对于这样的题目,a了没意思,你还得写的最短,才算是过,对不对。
我们把题目中的几个样式图都存到数组里去,存的方式是一个图对应4个bool变量,分别是上下左右是否有管道
记得把0位置留给没有任何管道的图,我们把这个要求的图的周围都填上这种没有任何管道的图(通过memset),就不用管边界了。
#include<iostream> #include<iomanip> #include<cstdio> #include<cstring> #include<sstream> #include<stack> #include<queue> #include<fstream> #include<algorithm> #include<map> #include<set> #include<vector> #include<cmath> #define CLR(x) memset(x,0,sizeof(x)) #define SETMAX(x) memset(x,0x3f,sizeof(x)); #define ll long long #define eps 1e-6 #define pow2(x) ((x)*(x)) #define forto(i,n) for(int i=0;i<n;i++) #define for1to(i,n) for(int i=1;i<=n;i++) #define VI vector<int> using namespace std; const double PI=acos(-1.0); #define INF 0x3f3f3f3f #define NINF 0xbfffffff using namespace std; int dir[][2]= { {-1,0},{0,1},{1,0},{0,-1} }; bool Dir[][4]= //分别对应 保留图、A、B、C、D…… { {0,0,0,0}, {1,0,0,1},{1,1,0,0},{0,0,1,1},{0,1,1,0}, {1,0,1,0},{0,1,0,1},{1,1,0,1},{1,0,1,1}, {0,1,1,1},{1,1,1,0},{1,1,1,1} }; int M[55][55]; bool Visit[55][55]; void dfs(int x,int y) { forto(i,4) { int tarx(x+dir[i][0]); int tary(y+dir[i][1]); if ( !Visit[tarx][tary]&& Dir[M[x][y]][i]&&Dir[M[tarx][tary]][(i+2)%4] ///(i+2)%4是对边 ) { Visit[tarx][tary]=true; dfs(tarx,tary); } } } int main() { cin.sync_with_stdio(false); #ifndef ONLINE_JUDGE freopen("test.txt","r",stdin); #endif // ONLINE_JUDGE int n,m; while (cin>>n>>m,n!=-1||m!=-1) { char tp; CLR(Visit); CLR(M); for1to(i,n) { for1to(j,m) { cin>>tp; M[i][j]=tp-'A'+1; //0是保留的无管道的样式,1是A图 } } int result(0); for1to(i,n) { for1to(j,m) { if (!Visit[i][j]) { Visit[i][j]=true; result++; dfs(i,j); } } } cout<<result<<endl; } return 0; }
相关文章推荐
- zoj2412 & hdu1198 - Farm Irrigation (DFS实现)
- hdu1198 Farm Irrigation DFS
- hdu1198 Farm Irrigation(DFS)
- hdoj1198-Farm Irrigation(dfs)
- ZOJ 2412 Farm Irrigation(DFS)
- hdu 1198 Farm Irrigation dfs
- zoj 2412 Farm Irrigation ——DFS入门题
- ZOJ2412 Farm Irrigation (DFS)
- hdu 1198 Farm Irrigation(深搜dfs || 并查集)
- HDU 1198 Farm Irrigation(DFS)
- zoj Farm Irrigation dfs
- ZOJ 2412 Farm Irrigation(DFS 条件连通块)
- HDU 1198 Farm Irrigation(dfs)
- Hdu 1198 Farm Irrigation (DFS 异或的应用)
- zoj 2412 Farm Irrigation dfs
- zoj 2412 Farm Irrigation(DFS~)
- HDU 1198 Farm Irrigation(DFS)
- zoj2412 Farm Irrigation 搜索dfs
- 【HDU 1198】Farm Irrigation(字符串拼接/类油田问题/DFS)
- zoj 2412 Farm Irrigation #DFS