一开始暴力,WA 了很多次,后来发现一大堆的漏洞,修补之后发现不行。才想到搜索之,所以改用BFS。A了!但是却耗费一大堆时间。
BFS的思路是一轮一轮的找同一个油田的洞口,记录总共找了多少轮就行了!
总结: 这种图的最好一开始就先用搜索试试!DFS或BFS!暴力实在坑爹! 发现BFS不够熟悉!
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
char ch[101][101];
int cot[101][101];
int m,n;
struct node
{
int x;
int y;
};
queue<node>q;
int main()
{
int i,j,ii,jj,k;
node s,t;
while(cin>>m>>n&&m!=0)
{
k = 0;
for(i = 0;i < m;i ++)
for(j = 0;j < n;j ++)
cin>>ch[i][j];
memset(cot,0,sizeof(cot));
for(i = 0;i < m;i ++)
for(j = 0;j < n;j ++)
{
if(ch[i][j] == '@'&&cot[i][j] == 0)
{
cot[i][j] = ++k;
s.x = i;
s.y = j;
q.push(s);
while(!q.empty())
{
t = q.front();q.pop();
//cout<<t.x<<" "<<t.y<<endl;
for(ii = t.x -1;ii <= t.x+1;ii ++)
for(jj = t.y -1;jj <= t.y+1;jj ++)
{
if(ii>=0&&jj>=0&&ch[ii][jj] == '@'&&cot[ii][jj]==0)
{
s.x = ii;
s.y = jj;
q.push(s);
cot[ii][jj] = k;
}
}
}
}
}
cout<<k<<endl;
}
return 0;
}