poj 3037(最短路)
2012-08-29 17:14
302 查看
题意:
Bessie在一个row*col的矩形区域内滑雪,起点为左上角,已知初始速度v,从a点到b点时,速度变为v(a)*2^(A-B)(A,B为对应点的高度),从a到b所需的时间为a的速度的倒数,她可向前后左右四个方向移动,求其到右下角的最少时间。
分析:
每点的速度是固定的:例如从a->b->c;则c出发的速度就是V*2^(A-B)*2^(B-C)=V*2^(A-C);时间则是速度的倒数。
注意:
1、inf要足够大
2、因为矩阵内的值范围[-25,25],如果用1<<x的方式求2的幂,很显然这个数会整数超出范围。所以要用
Bessie在一个row*col的矩形区域内滑雪,起点为左上角,已知初始速度v,从a点到b点时,速度变为v(a)*2^(A-B)(A,B为对应点的高度),从a到b所需的时间为a的速度的倒数,她可向前后左右四个方向移动,求其到右下角的最少时间。
分析:
每点的速度是固定的:例如从a->b->c;则c出发的速度就是V*2^(A-B)*2^(B-C)=V*2^(A-C);时间则是速度的倒数。
注意:
1、inf要足够大
2、因为矩阵内的值范围[-25,25],如果用1<<x的方式求2的幂,很显然这个数会整数超出范围。所以要用
__int64
t=1;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
usingnamespacestd;
#defineinf99999999999LL
intdx[]={0,0,-1,1};
intdy[]={-1,1,0,0};
structpoint
{
intx;
inty;
};
doubledis[103][103];
intmap[103][103];
boolvis[103][103];
intV,R,C;
boolisok(pointpo)
{
if(po.x>0&&po.x<=R&&po.y>0&&po.y<=C)
returntrue;
returnfalse;
}
voidspfa(intr,intc,intv)
{
queue<point>Q;
__int64t=1;
doublek;
dis[1][1]=0;
pointp={1,1};
Q.push(p);
vis[1][1]=1;
while(!Q.empty())
{
p=Q.front();
Q.pop();
vis[p.x][p.y]=0;
ints=map[1][1]-map[p.x][p.y];
if(s>=0)
k=(t<<s)*v;
else
k=1.0/(t<<(-s))*v;
for(inti=0;i<4;i++)
{
pointnext;
next.x=p.x+dx[i];
next.y=p.y+dy[i];
if(isok(next))
{
if(dis[next.x][next.y]>dis[p.x][p.y]+1.0/k)
{
dis[next.x][next.y]=dis[p.x][p.y]+1.0/k;
if(!vis[next.x][next.y])
{
vis[next.x][next.y]=1;
Q.push(next);
}
}
}
}
}
}
intmain()
{
while(scanf("%d%d%d",&V,&R,&C)!=EOF)
{
memset(vis,0,sizeof(vis));
for(inti=1;i<=R;i++)
for(intj=1;j<=C;j++)
{
scanf("%d",&map[i][j]);
dis[i][j]=inf;
}
spfa(R,C,V);
printf("%.2f\n",dis[R][C]);
}
return0;
}
相关文章推荐
- poj 3037 最短路
- poj 3037 Skiing 最短路spfa
- POJ 3126 Prime Path bfs求最短路
- poj 2449 K 短路(不严格)
- POJ 1135 Domino Effect (Dijkstra 最短路)
- POJ 1125--Stockbroker Grapevine【多源最短路】
- POJ 3114 Countries in War 强连通+最短路
- poj 3967 Ideal Path 字典序最小最短路
- POJ 2449 第k短路 Dijkstra+A*
- 最短路spfaPOJInvitation Cardsj解题报告
- POJ 1502 MPI Maelstrom(单源最短路)
- POJ - 3662 Telephone Lines 二分 + 最短路
- poj 3268 Silver Cow Party 最短路/dijkstra
- POJ 1125 -- Stockbroker Grapevine (弗洛伊德最短路)
- 最短路 floyd变形 POJ-2253
- POJ 3268-Silver Cow Party【正向+反向最短路】
- poj 1511&zoj 2008 最短路
- POJ 2449 求第K短路
- POJ1062 昂贵的聘礼(最短路)
- 最短路(Dijkstra) POJ 1062 昂贵的聘礼