此题为白书数据结构基础图的训练参考
题目链接 http://acm.hust.edu.cn/vjudge/problem/19435
解题思路
嗯。。。跟白书里的寻找八连块一模一样。。。
而且最多100*100的数据规模,bfs直接递归也不会溢出。。。
代码
#include<stdio.h> #include<string.h> const int maxLen = 201; int mat[maxLen][maxLen]; int visit[maxLen][maxLen]; void dfs(int i, int j) { if(mat[i][j]=='*'||mat[i][j]==0||visit[i][j]) return ; visit[i][j] = 1; dfs(i-1, j-1);dfs(i-1, j);dfs(i-1,j+1); dfs(i,j-1); dfs(i, j+1); dfs(i+1,j-1);dfs(i+1,j); dfs(i+1,j+1); } int main() { int m, n; scanf("%d%d", &m, &n); while(m!=0 && n!=0) { int count = 0; memset(mat, 0, sizeof(mat)); memset(visit, 0, sizeof(visit)); getchar(); for(int i=1; i<=m; i++) { for(int j=1; j<=n; j++) mat[i][j] = getchar(); getchar(); } for(int i=1; i<=m; i++) { for(int j=1; j<=n; j++) if(mat[i][j]=='@'&&!visit[i][j]) { count++; dfs(i, j); } } printf("%d\n", count); scanf("%d%d", &m, &n); } return 0; }