标签:
搜索都不熟练,所以把以前写的一道搜索复习下,然后下一步整理搜索和图论和不互质的中国剩余定理的题
Description
GeoSurvComp地质调查公司负责探测地下石油储藏。 GeoSurvComp现在在一块矩形区域探测石油,并把这个大区域分成了很多小块。他们通过专业设备,来分析每个小块中是否蕴藏石油。如果这些蕴藏石油的小方格相邻,那么他们被认为是同一油藏的一部分。在这块矩形区域,可能有很多油藏。你的任务是确定有多少不同的油藏。
Input
输入可能有多个矩形区域(即可能有多组测试)。每个矩形区域的起始行包含m和n,表示行和列的数量,1<=n,m<=100,如果m =0表示输入的结束,接下来是n行,每行m个字符。每个字符对应一个小方格,并且要么是‘*‘,代表没有油,要么是‘@‘,表示有油。
Output
对于每一个矩形区域,输出油藏的数量。两个小方格是相邻的,当且仅当他们水平或者垂直或者对角线相邻(即8个方向)。
Sample Input
Sample Output
#include "stdio.h" #include "string.h" int n, m; char mat[105][105]; int vis[105][105]; void dfs(int x, int y) { if(x < 0 || x >= m || y < 0 || y >= n) return; if((mat[x][y] != ‘@‘)|| vis[x][y]) return; mat[x][y] = 1; for(int i = -1; i <= 1; i++) { for(int j = -1; j <= 1; j++) if(i != 0 || j != 0) dfs(x+i, y+j); } } int main() { while(scanf("%d%d", &m, &n) != EOF) { if(m == 0) break; int coun = 0; memset(vis, 0, sizeof(vis)); for(int i = 0; i < m; i++) { scanf("%s", mat[i]); } for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { if((mat[i][j] == ‘@‘) && vis[i][j] == 0) { dfs(i, j); ++coun; } } } printf("%d\n", coun); } return 0; }
标签:
原文地址:http://www.cnblogs.com/rain-1/p/4790497.html