找油田
Posted xdaniel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找油田相关的知识,希望对你有一定的参考价值。
模板题,题目就不说了
思路就是新建一个标签数组,如果两个油田是联通的,那么他们的编号是相同的,然后进行遍历,每找到一块新的油田,那么标签+1,标签即答案
代码如下:
#include <cstdio> char grid[105][105]; int tag[105][105]; int n, m; void dfs(int x, int y, int mark) { //越界检查 if(x < 0||y < 0||x >= n||y >= m) return; //若不是油田或者已经被标记了 if(grid[x][y] == ‘*‘||tag[x][y]) return; //至此,该坐标符合条件 tag[x][y] = mark; for (int i = -1; i < 2;++i) for (int j = -1; j < 2;++j) //不对自己进行深搜,否则导致无限递归 if(!(i == 0&&j == 0)) dfs(x + i, y + j, mark); } int main() { int mark; while(scanf("%d%d",&n,&m) != EOF) { if(n == 0) break; //初始化 mark = 0; for (int i = 0; i < n;++i) for (int j = 0; j < m;++j) tag[i][j] = 0; //输入 for (int i = 0; i < n; i++) scanf("%s", grid[i]); //进行深搜 for (int i = 0; i < n;i++) for (int j = 0; j < m;j++) if(grid[i][j] == ‘@‘&&!tag[i][j]) dfs(i, j, ++mark); printf("%d ", mark); } return 0; }
以上是关于找油田的主要内容,如果未能解决你的问题,请参考以下文章