标签:des style blog http io ar os sp for
The input file contains one or more grids. Each grid begins with a line containing m and n, the number of rows and columns in the grid, separated by a single space. If m = 0 it signals the end of the input; otherwise and . Following this are m lines of n characters each (not counting the end-of-line characters). Each character corresponds to one plot, and is either `*‘, representing the absence of oil, or `@‘, representing an oil pocket.
Sample Input
Sample Output
2
题目大意:给你一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。
思路:DFS上下左右斜方向寻找八连块。vis数组记录的是联通块的编号。若
暂未搜到则为0。用dx,dy二重循环表示八个方向。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; char map[110][110]; int vis[110][110],M,N; void dfs(int i,int j,int count) { if(i < 0 || i > M-1 || j < 0 || j > N-1) return; if(vis[i][j] ||map[i][j]!='@') return; vis[i][j] = count; for(int dx = -1; dx <= 1; dx++) { for(int dy = -1; dy <= 1; dy++) { if(dx!=0 || dy!=0) dfs(i+dx,j+dy,count); } } } int main() { while(~scanf("%d%d",&M,&N) &&(M||N)) { memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); for(int i = 0; i < M; i++) scanf("%s",map[i]); int count = 0; for(int i = 0; i < M; i++) { for(int j = 0; j < N; j++) { if(vis[i][j]==0 && map[i][j]=='@') dfs(i,j,++count); } } printf("%d\n",count); } return 0; }
标签:des style blog http io ar os sp for
原文地址:http://blog.csdn.net/lianai911/article/details/41869929