hdu1198解题报告(dfs)
2015-05-25 20:56
399 查看
dfs求子连通图的变形,没什么难度,除了打错了个变量WA了很久,然后搞错了i++和++i。。。。。
细节决定成败啊~~~~~~~~
细节决定成败啊~~~~~~~~
#include<cstdio> #include<iostream> #include<mem.h> #include<memory.h> #include<algorithm> using namespace std; const int maxn=550; char G[maxn][maxn];//储存图~~ int vis[maxn][maxn];//访问标记,顺便储存次数 int m,n; int dr[]={-1,0,+1,0};//向上,右,下,左,顺时针 int dc[]={0,+1,0,-1}; int types[11][4]={{1,0,0,1},//11种田顺时针(上,右,下,左) {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} }; void dfs(int r,int c,int cnt) { vis[r][c]=cnt; for(int i=0;i<4;i++) { int nr=r+dr[i]; int nc=c+dc[i]; if(nr<0||nr>=m||nc<0||nc>=n) continue; if(vis[nr][nc]) continue; if(types[G[r][c]-'A'][i]&&types[G[nr][nc]-'A'][(i+2)%4]) { dfs(nr,nc,cnt); } } } int main() { //freopen("1.txt","r",stdin); while(scanf("%d%d",&m,&n)!=0) { if(m==-1&&n==-1) break; for(int i=0;i<m;i++) scanf("%s",G[i]); memset(vis,0,maxn*maxn*sizeof(int)); int ans=0; for(int i=0;i<m;i++) for(int j=0;j<n;j++) { if(!vis[i][j]) dfs(i,j,++ans); } printf("%d\n",ans); } return 0; }
相关文章推荐
- hdu 1010 Tempter of the Bone dfs搜索 奇偶剪枝 解题报告
- HDU 1010 temp of the bone 解题报告 (DFS)
- 2018.1.29【 HDU - 1518 】解题报告(dfs,极易TLE,剪枝)
- HDU2489 Minimal Ratio Tree 解题报告【图论】【Kruskal】【dfs】
- hdu 5547 Sudoku dfs 暴力回溯 解题报告
- HDU - 1010 Tempter of the Bone 深搜模板题(DFS)解题报告
- HDU 4582 DFS spanning tree 解题报告(贪心 & 树形DP)
- HDU - 5802 Windows 10解题报告(贪心+dfs)
- 2018.3.1【 HDU - 6113 】解题报告(百度之星初赛,BFS,DFS,图像处理)
- HDU 1111 Secret Code DFS 解题报告
- HDU1010 Tempter of the Bone 解题报告--dfs
- hdu 4740 The Donkey of Gui Zhou dfs 搜索 解题报告
- 解题报告:HDU_4016 Magic Bitwise And Operation 简单dfs
- BZOJ2938 [Poi2000]病毒 解题报告【AC自动机】【DFS】
- hdu 3074 Multiply game(线段树模板题) 解题报告
- hdu 4034 Graph解题报告-Floyd思想
- HDU 2049 不容易系列之(4)考新郎——解题报告
- HDU 2147 kiki's game 解题报告
- 2018.1.28【 SCU - 1114 】解题报告(DP,路径,DFS)
- hdu2510 符号三角形(dfs+打表) 解题报告