HDU 1241

http://acm.hdu.edu.cn/showproblem.php?pid=1241

BFS  横着,竖着或斜着相连都是一组  一共有几组?

本来很基础的一道搜索 可是有一个地方错误  找了一晚上   while(beg<end)  错写为了  

while(beg<=end)  


这道题我用的BFS 还可以DFS  并查集也可以做

 

 

敲了俩代码  改了一晚上  贴一下吧

 

 

(一)BFS

 

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
using namespace std;
char a[110][110];
//{-1,0,1,-1,1,-1,0,1},YY[8]={-1,-1,-1,0,0,1,1,1};
int XX[8][2]={{-1,-1},{0,-1},{1,-1},{-1,0},{1,0},{-1,1},{0,1},{1,1}};
int R,C;

struct node{int x, y;}t,tt;

void bfs(int r,int c,int num)
{

queue<node>qu;
int xx,yy,k,beg,end;
t.x=r,t.y=c;
qu.push(t);
a[r][c]='*';

while(!qu.empty())
{
t=qu.front();

qu.pop();
for(k=0;k<8;k++)
{
xx=t.x+XX[k][0], yy=t.y+XX[k][1];

if(a[xx][yy]=='@')
{
tt.x=xx,tt.y=yy;
qu.push(tt);
a[xx][yy]='*';
//num++;
// if(num==100)return;!!!真晕 加上就错
}
}
}
return ;
}

int main()
{
int i,j,sum;

while(scanf("%d%d",&R,&C)!=EOF&&(R+C))
{
memset(a,0,sizeof(a));
for(i=1;i<=R;i++)
scanf("%s",a[i]+1);


sum=0;
for(i=1;i<=R;i++)
for(j=1;j<=C;j++)
{
if(a[i][j]=='@')
{
sum++;
bfs(i,j,1);


}

}


printf("%d\n",sum);

}
return 0;
}

(二) BFS



#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
char a[102][102];
int visit[102][102];
int XX[8]={-1,0,1,-1,1,-1,0,1},YY[8]={-1,-1,-1,0,0,1,1,1};
int R,C;

struct{int x, y;}qu[10005];

void bfs(int r,int c,int num)
{
int xx,yy,k,beg,end;
visit[r][c]=1;
beg=0;end=1;
qu[1].x=r,qu[1].y=c;

while(beg<end)
{
int f=++beg;
for(k=0;k<8;k++)
{
xx=qu[f].x+XX[k], yy=qu[f].y+YY[k];
if(xx<0||xx>=R||yy<0||yy>=C)continue;
if(a[xx][yy]=='*')continue;
if(visit[xx][yy])continue;
if(!visit[xx][yy])
{
end++;
qu[end].x=xx,qu[end].y=yy;
visit[xx][yy]=1;
// num++;
// if(num==100)return;
}
}
}
return ;
}

int main()
{
int i,j,sum;
while(scanf("%d%d",&R,&C)!=EOF&&(R+C))
{
for(i=0;i<R;i++)
scanf("%s",a[i]);

memset(visit,0,sizeof(visit));
sum=0;
for(i=0;i<R;i++)
for(j=0;j<C;j++)
{
if(!visit[i][j]&&a[i][j]=='@')
{
sum++;
bfs(i,j,1);

}

}

printf("%d\n",sum);
}
return 0;
}



posted @ 2011-11-23 21:47  快乐.  阅读(241)  评论(0编辑  收藏  举报