关闭

hdu 1242 (bfs+优先队列)

365人阅读 评论(0) 收藏 举报
分类:
# include <iostream>
# include <queue>
# include <cstring>
using namespace std;
int m,n;
char map[205][205];
int visit[205][205];
int xx[4]={1,-1,0,0};
int yy[4]={0,0,1,-1};
struct point
{
	int x;
	int y;
	int step;
	friend bool operator < (point a,point b)
	{
		return a.step>b.step;
	}
}a,b;
int bfs()
{
	int flag=0;
	memset(visit,0,sizeof(visit));
	visit[a.x][a.y]=1;
	priority_queue<point> q;
	q.push(a);
	while(!q.empty())
	{
		b=q.top();
		q.pop();
		int i;
		if(map[b.x][b.y] == 'r')  
        {  
            flag = b.step;  
            return flag;  
        }     
		for(i=0;i<4;i++)
		{
			a.x=b.x+xx[i];
			a.y=b.y+yy[i];
			a.step=b.step+1;
			if(a.x<0||a.x>=m||a.y<0||a.y>=n)
				continue;
			if(!visit[a.x][a.y]&&map[a.x][a.y]!='#')
			{
				visit[a.x][a.y]=1;
				if(map[a.x][a.y]=='x')
					a.step++;
				q.push(a);
				
			}
		}
	}
	return 0;
}
int main()
{
	while(scanf("%d %d",&m,&n)!=EOF)
	{
		int i,j;
		for(i=0;i<m;i++)
		{
			scanf("%s",map[i]);
			for(j=0;j<n;j++)
			{
				if(map[i][j]=='a')
				{
					a.x=i;
					a.y=j;
					a.step=0;
				}
			}
		}   
		int step = bfs();
		if(step)
			printf("%d\n",step);
		else
			printf("Poor ANGEL has to stay in the prison all his life.\n");
		
	}
	return 0;
}
记住优先队列的使用
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38456次
    • 积分:1282
    • 等级:
    • 排名:千里之外
    • 原创:94篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条