方法:dfs
思想:本题主要是求有几块油田,中文题目可查看zjut1012,可以利用dfs,
从每一个可以移动的点出发,可以走到的就作一个标记,进行了几次搜索,
答案就是几次,本题不需要回溯。
代码:
//zjut1012 tzc1334
//后面m(1≤m≤100)行数据,每行有n(1≤n≤100)个字符
#include <iostream>
using namespace std;
int n,m;
bool g[105][105];
int dir[8][2]={-1,0,0,-1,1,0,0,1,1,1,-1,-1,1,-1,-1,1};
void dfs(int x,int y)
{
g[x][y]=0;
for(int i=0;i<8;i++)
{
int x1=x+dir[i][0];
int y1=y+dir[i][1];
if(x1<0||y1<0||x1>=n||y1>=m||g[x1][y1]==0)continue;
dfs(x1,y1);
}
}
int main(int argc, char *argv[])
{
while(cin>>n>>m&&(n||m))
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{ char tmp;
cin>>tmp;
if('@'==tmp)g[i][j]=1;
if('*'==tmp)g[i][j]=0;
}
int ans=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(g[i][j]){ dfs(i,j);ans++; }
cout<<ans<<endl;
}
return 0;
}