您的位置:首页 > 其它

6.4.1 用DFS求连通块 UVA 572 Oil Deposits DFS水题

2016-06-23 19:42 267 查看


#include <cstdio>
#include <cstring>
int M,N;
char A[101][101];
int  B[101][101]={};
void DFS(int i,int j,int ID)
{
if(i<1||i>M||j<1||j>N) return;//界外
if(B[i][j]||A[i][j]!='@') return;//已经访问过或者不是@
B[i][j]=ID;//标识所属块 同时相当于标识已走
DFS(i-1,j-1,ID);DFS(i-1,j,ID);DFS(i-1,j+1,ID);
DFS(i,j-1,ID);                DFS(i,j+1,ID);
DFS(i+1,j-1,ID);DFS(i+1,j,ID);DFS(i+1,j+1,ID);
}
int Handle(void)
{
int ID=0;
for(int i=1;i<=M;i++)
for(int j=1;j<=N;j++)
if(A[i][j]=='@'&&!B[i][j]) DFS(i,j,++ID);
return ID;
}
int main(void)
{
//freopen("D:\\test.txt","r",stdin);
while(~scanf("%d %d\n",&M,&N)&&M)
{
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
for(int i=1;i<=M;i++) scanf("%s",A[i]+1);
printf("%d\n",Handle());
//  for(int i=1;i<=M;i++,putchar('\n'))
//     for(int j=1;j<=N;j++) printf("%4d ",B[i][j]);

}
}


“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: