紫书UVA 572
dfs+查过的做记号
/*ample Input
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
Sample Output
0
1
2
2
*/
#include <iostream>
#include<cstring>
using namespace std;
int rr,cc;
int idx[105][105];
char s[105][105];
void dfs(int r,int c,int id)
{
if(r<0||c<0||r>=rr||c>=cc)return ;
if(idx[r][c]>0||s[r][c]!='@')return ;
idx[r][c]=id;
for(int i=-1;i<=1;i++)
{
for(int j=-1;j<=1;j++)
{
if(i!=0||j!=0)
dfs(r+i,c+j,id);
}
}
}
int main()
{
while(cin>>rr>>cc&&rr&&cc)
{
memset(idx,0,sizeof(idx));
for(int i=0;i<rr;i++)
cin>>s[i];
int cnt=0;
for(int i=0;i<rr;i++)
{
for(int j=0;j<cc;j++)
{
if(idx[i][j]==0&&s[i][j]=='@')dfs(i,j,++cnt);
}
}
cout<<cnt<<endl;
}
return 0;
}