算法竞赛入门经典 油田---经典的联通快问题
2017-08-22 20:35
197 查看
//题型:求联通块问题 #include<cstdio> #include<cstring> const int maxn = 100 + 5; char pic[maxn][maxn]; int m, n, idx[maxn][maxn]; void dfs(int r, int c, int id) {//r:x,c:y,id表示记的数 if(r < 0 || r >= m || c < 0 || c >= n) return;//判越界 if(idx[r][c] > 0 || pic[r][c] != '@') return;//判重,以及如果不是@了就退出 idx[r][c] = id;//idx赋值 for(int dr = -1; dr <= 1; dr++) for(int dc = -1; dc <= 1; dc++)//走的方向 if(dr != 0 || dc != 0) dfs(r+dr, c+dc, id); } int main() { while(scanf("%d%d", &m, &n) == 2 && m && n) { for(int i = 0; i < m; i++) scanf("%s", pic[i]);//新奇的输入方式 memset(idx, 0, sizeof(idx)); int cnt = 0;//计数器 for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) if(idx[i][j] == 0 && pic[i][j] == '@') dfs(i, j, ++cnt);//当碰见0或@的时候,dfs一下 printf("%d\n", cnt); } return 0; } /* 总结: 1.新奇的输入方式:定义一个char二维数组,可以以一维数组的字符串输入 2.思路:输入,判断,dfs,判重,判越界,再dfs */
相关文章推荐
- 算法竞赛入门经典训练指南-P4例题3 分金币问题总结
- DP DAG 9-3硬币问题(算法竞赛入门经典p162)
- 约瑟夫环问题(根据算法竞赛入门经典一题改编)
- 算法竞赛入门经典 8.3.2循环日程表问题
- 算法竞赛入门经典:第七章 暴力求解法 7.18倒水问题
- 算法之路二:刘汝佳算法竞赛入门经典 3.4竖式问题
- 刘汝佳p39,3-2(开灯问题)算法竞赛入门经典第二版
- 0-1背包 (算法竞赛入门经典0-1背包问题)
- 算法之路二:刘汝佳算法竞赛入门经典:STL不定长数组 木块问题 UVA101
- 刘汝佳p41,3-4(竖式问题)算法竞赛入门经典第二版
- 算法竞赛入门经典ch3_ex4竖式问题
- 算法竞赛入门经典 例3-1开灯问题
- 算法竞赛入门经典: 第三章 数组和字符串 3.2开灯问题
- 刘汝佳算法竞赛入门经典中的运算符>?问题
- 算法竞赛入门经典 例题9-3 硬币问题
- 算法竞赛入门经典 程序3-2 开灯问题
- DAG上的动态规划 - 算法竞赛入门经典 - 嵌套矩形问题
- 算法竞赛入门经典 7.5.3 八数码问题
- Uva 101 the block problem 木块问题(算法竞赛经典入门)STL vector
- 【算法竞赛入门经典】树的最大独立集、树的唯一性问题 例题9-13 UVa1220