油田 uva 572
2018-02-27 10:28
197 查看
高能预警:此文作者水平极差,漏洞百出,错误俯拾皆是,行文毫无逻辑!此文仅供作者自己研究所用。 所谓八连块没有什么神奇的,就是尽可能地把@字符连在一起,看能形成几块@的集合体。
#include<cstdio> #include<cstring> using namespace std; const int maxn = 100 + 5; char pic[maxn][maxn]; int m, n, idx[maxn][maxn]; void dfs(int r, int c, int id) { if(r < 0 || r >=m || c < 0 || c >= n) return;//小心越界的情况,也就是访问到非法空间 if(idx[r][c] > 0 || pic[r][c] != '@') return;//如果已经被打上连通分量编号或者那个地方符号不为@ idx[r][c] = id;//给它打上特有的标记 for(int dr = -1; dr <= 1; dr++)//d可以理解为delta,意思是变化的 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);/*不妨以生化感染为例,一旦发现可被感染的@符号,它就会带上母体的一个特有编号并且把它遗传给它感染的后代*/ printf("%d\n", cnt); } return 0; }感悟: 对于我们所要求的那个数,不一定是十分刻意的操作,比如用某个函数去求,而是在一系列操作中自然而然的得到这个结果。 以后再怎么样,不如试着先把主函数写出来,然后在一个个完善子函数。
相关文章推荐
- UVa 572 油田(DFS求连通块)
- 油田问题 UVA 572
- 用DFS求连通块(油田Oil Deposits,UVa 572)
- 油田(UVA572)
- Uva 572 Oil Deposits 油田 (DFS求连通块)
- 油田问题 UVA 572
- 油田(Oil Deposits,UVa 572)
- UVA 572 油田(BFS)
- 油田(Oil Deposits,UVa 572)
- UVa 572 油田
- uva572 油田 连通块遍历
- uva 572 油田
- 油田(Oil Deposits, UVa 572)
- 例题 6-12 油田 UVa 572 用dfs求连通块
- UVA-6.4.1-油田-572-DFS
- UVa572油田(连通块个数)
- 6_12 油田(UVa572)<图的连通块DFS>
- 油田(Oil Deposits, UVa 572)
- 算法竞赛入门经典 例题 6-12 油田(Oil Deposits, UVa 572)
- UVa-572油田