POJ2253-Frogger
http://poj.org/problem?id=2253
也是红皮上的
#include<stdio.h> #include<string.h> #include<math.h> #define INF 999999.000 #define N 202 float map[N][N],dis[N],min,max; bool vis[N]; int n,p=0; struct { int x,y; }stone[N]; void dijkstra() { int i,j,k; memset(vis,0,sizeof(vis)); for(i=1;i<=n;i++) dis[i]=map[1][i]; dis[1]=0; vis[1]=1; for(i=1;i<=n;i++) { min=INF; for(j=1;j<=n;j++) if(!vis[j]&&dis[j]<min) { min=dis[j]; k=j; } if(min==INF) break; vis[k]=1; for(j=1;j<=n;j++) { max=dis[k]>map[k][j]?dis[k]:map[k][j]; if(dis[j]>max) dis[j]=max; } } printf("Scenario #%d\n",++p); printf("Frog Distance = %.3f\n\n",dis[2]); } int main(void) { int i,j; double d; while(scanf("%d",&n)&&n) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) map[i][j]=INF; for(i=1;i<=n;i++) { scanf("%d%d",&stone[i].x,&stone[i].y); for(j=1;j<i;j++) { d=sqrt((float)(stone[i].x-stone[j].x)*(stone[i].x-stone[j].x)+(stone[i].y-stone[j].y)*(stone[i].y-stone[j].y)); if(map[i][j]>d) map[i][j]=map[j][i]=d; } } dijkstra(); } return 0; }