标签:练习 move 不同 思路 mini rate number bottom res
Input
Output
Sample Input
1 3 3 1 5 3 6 3 5 2 4 3
Sample Output
29.00
Hint
#include<stdio.h> #include<math.h> #include<float.h> //DBL_MAX头文件 #include<queue> using namespace std; int a[105][105],b[105][105]; double dis[105][105],sp[105][105]; int t[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; int v0,r,c; struct Node{ int x,y; }node; double spfa(int x,int y) { int i,j; queue<Node> q; for(i=1;i<=r;i++){ for(j=1;j<=c;j++){ dis[i][j]=DBL_MAX; } } dis[x][y]=0; node.x=x; node.y=y; q.push(node); b[x][y]=1; while(q.size()){ int fx=q.front().x; int fy=q.front().y; q.pop(); b[fx][fy]=0; for(i=0;i<4;i++){ int tx=fx+t[i][0]; int ty=fy+t[i][1]; double t=sp[fx][fy]; if(tx<1||ty<1||tx>r||ty>c) continue; if(dis[fx][fy]+t<dis[tx][ty]){ dis[tx][ty]=dis[fx][fy]+t; if(!b[tx][ty]){ node.x=tx; node.y=ty; q.push(node); b[tx][ty]=1; } } } } return dis[r][c]; } int main() { int i,j; scanf("%d%d%d",&v0,&r,&c); for(i=1;i<=r;i++){ for(j=1;j<=c;j++){ scanf("%d",&a[i][j]); sp[i][j]=1.0/(v0*pow(2.0,a[1][1]-a[i][j])); //提前记录 } } printf("%.2f\n",spfa(1,1)); return 0; }
标签:练习 move 不同 思路 mini rate number bottom res
原文地址:http://www.cnblogs.com/yzm10/p/7270735.html