这个题就是求无向图的连通块数量,用BFS写太长了麻烦 ,直接用DFS深搜。
写完后本地过了,但交UVA上一直CE,然后把index数组的名字改成了idx就过了,慎重起名,改了1h
直接贴AC代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 10010;
int idx[maxn][maxn]; // 用来记录所在某个石油所在连通块的编号
char graph[maxn][maxn];
int m,n;
void dfs(int a,int b,int number)
{
if(a<0||b<0||a>=m||b>=n)
return;
if(idx[a][b]>0||graph[a][b]!='@')
return;
idx[a][b] = number;
for (int i = -1; i<=1; i++)
for (int j = -1; j<=1; j++) {
if(i!=0||j!=0)
dfs(a+i,b+j,number);
}
};
int main()
{
while((cin>>m>>n)&&m&&n ) {
memset(idx,0,sizeof(idx));
for (int i = 0; i < m; i++)
scanf("%s",graph[i]);
int cnt = 0;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if(idx[i][j]==0 && graph[i][j]=='@')
dfs(i,j,++cnt);
cout<<cnt<<endl;
}
return 0;
}