您的位置:首页 > 其它

hdu1241——Oil Deposits(广搜的简单应用)

2010-08-31 14:00 253 查看
这道题,求的是油矿!关键是有相邻的话,要归并为一个油矿!对此,我们对每个点进行遍历,如果这个点还没进行过bfs,且它是一个油矿,那么,对其标记为已经bfs,并对其为起点bfs,遍历过的且为油矿的点,标记为已bfs。其中,设置一个计数,用来记录有多少个点进行过bfs,即为题目所求!

#include<stdio.h>
#include<string.h>
#define max 105
char g[max][max];
int n,m,used[max][max];
int dir[][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};
struct node
{
int x,y;
};
struct node queue[max*max],position,temp;
void bfs(int sx,int sy)
{
int i,j,front=0,rear=0;
rear++;
queue[rear].x=sx;queue[rear].y=sy;
while(front!=rear)
{
front++;
position.x=queue[front].x;position.y=queue[front].y;
for(i=0;i<8;i++)
{
temp.x=position.x+dir[i][0];
temp.y=position.y+dir[i][1];
if(temp.x>=0&&temp.y>=0&&temp.x<n&&temp.y<m&&used[temp.x][temp.y]==0&&g[temp.x][temp.y]!='*')
{
rear++;
queue[rear].x=temp.x;queue[rear].y=temp.y;
used[temp.x][temp.y]=1;
}
}
}
}
main()
{
int i,j,num;
while(scanf("%d%d",&n,&m)&&n&&m)
{
num=0;
memset(used,0,sizeof(used));
for(i=0;i<n;i++)
{
scanf("%s",&g[i]);
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(g[i][j]=='@'&&used[i][j]==0)
{
num++;
bfs(i,j);
}
printf("%d/n",num);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: