Description
Input
Output
Sample Input
1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0
Sample Output
0 1 22
题目分析
给你一个地图,上面有油田的标记,水平垂直或对角都属于同一个油田,问一共有多少个油田
解题思路
深搜呗,向八个方向上搜索
源代码
#include<iostream> #include<string> #include<string.h> #include<stdio.h> char map[105][105]; int n,m; int dir[][2]={{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}}; bool dfs(int i,int j) { int xx,yy,k; map[i][j]='*'; for(k=0;k<8;k++) { xx=i+dir[k][0]; yy=j+dir[k][1]; if(xx>-1&&xx<n&&yy>-1&&yy<m) { if(map[xx][yy]=='@') dfs(xx,yy); } } } int main() { int i,j,sum; while(~scanf("%d%d",&n,&m)&&n&&m) { sum=0; for(i=0;i<n;i++) scanf("%s",map[i]); for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(map[i][j]=='@') { dfs(i,j); sum++; } } } printf("%d\n",sum); } }