题目链接:http://poj.org/problem?id=1562
题目大意:就是找有多少个油田,在垂直或者水平或者垂直方向上相邻都算作是属于同一个油田。
解题思路:如果遇到@的话就进行八个方位搜索,然后搜索到@变成*避免重复搜索。
代码如下:

#include<stdio.h> #include<string.h> char map[102][102]; int dir[8][2]={{0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}, {-1, 1}}; int m, n; void dfs(int x, int y) { int i; map[x][y]='*'; for(i=0; i<8; i++) { int xx=dir[i][0]+x; int yy=dir[i][1]+y; if(xx>=0&&xx<m&&yy>=0&&yy<n&&map[xx][yy]=='@') { dfs(xx, yy); } } } int main() { int i, j; while(scanf("%d%d", &m, &n)!=EOF) { if(m==0&&n==0) break; for(i=0; i<m; i++) scanf("%s", map[i]); int num=0; for(i=0; i<m; i++) for(j=0; j<n; j++) { if(map[i][j]=='@') { dfs(i, j); num++; } } printf("%d\n", num); } return 0; }