本文主要是介绍hdu(2425) Hiking Trip,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意;
给出一个地图,地图有四种路面,经过每种路面花费的
时间不同,问从起点到终点所花费的最少时间是多少
这个题很好;独自完成了;
所要注意的是;
一;用队列这样写不对,要控制入队的量;
二;不要把值直接赋在map上,只要在map标记下即可,
然后再bfs中加上对应的时间值;
#include"stdio.h"
#include"string.h"
#include"queue"
char map[26][26];
int visit[26][26];
int dir[4][2]={-1,0, 0,1, 1,0, 0,-1};
int a[3];
int n,m,sx,sy,ex,ey;
using namespace std;
struct point
{
int x,y;
int step;
friend bool operator<(point a,point b)
{
return a.step>b.step;
}
};
int judge(int x,int y)
{
if(x>=0&&x<n&&y>=0&&y<m&&map[x][y]!='@')
return 1;
return 0;
}
int bfs(int x,int y)
{
int i;
memset(visit,0,sizeof(visit));
priority_queue<point>q;
point cur,next;
cur.x=x;cur.y=y;
cur.step=0;
visit[x][y]=1;
q.push(cur);
while(!q.empty())
{
next=q.top();
q.pop();
if(next.x==ex&&next.y==ey)
return next.step;
for(i=0;i<4;i++)
{
x=next.x+dir[i][0];
y=next.y+dir[i][1];
if(judge(x,y)&&visit[x][y]==0)
{
visit[x][y]=1;
cur.x=x,cur.y=y;
cur.step=next.step+a[map[x][y]-'0'];
q.push(cur);
}
}
}
return -1;
}
int main()
{
int i,j,r=1;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<3;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
scanf("%s",map[i]);
for(j=0;j<m;j++)
{
if(map[i][j]=='#')
map[i][j]='0';
else if(map[i][j]=='T')
map[i][j]='2';
else if(map[i][j]=='.')
map[i][j]='1';
}
}
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
printf("Case %d: %d\n",r++,bfs(sx,sy));
}
return 0;
}
这篇关于hdu(2425) Hiking Trip的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!