zoj 1942 || poj 2253 Frogger(继续DIJ。。)

求青蛙GG能跳到青蛙MM路线上的最小跳。。。

 

与1952很雷同很雷同。。

 

今天上午看了4道题。。。AC两道了。。。歇歇,洗澡去~~

 

#include <stdio.h> #include <stdlib.h> #include <math.h> #include <limits.h> #include <memory.h> #define N 202 #define F 0.000000001 double dist(int x,int y,int a,int b) { return sqrt((x-a)*(x-a) + (y-b)*(y-b)); } int main(void) { int n,i,j,count = 1,pos[N][3],now,hash[N]; double len[N][N],dis[N],min,temp; while( scanf("%d",&n)!=EOF && n ) { for(i=1; i<=n; i++) scanf("%d%d",&pos[i][1],&pos[i][2]); for(i=1; i<=n; i++) for(j=1; j<=n; j++) len[i][j] = INT_MAX; for(i=1; i<=n; i++) for(j=i+1; j<=n; j++) len[i][j] = len[j][i] = dist(pos[i][1],pos[i][2],pos[j][1],pos[j][2]); for(i=1; i<=n; i++) dis[i] = INT_MAX; memset(hash,0,sizeof(hash)); dis[now = 1] = 0; hash[now] = 1; for(i=1; i<n; i++) { for(j=1; j<=n; j++) if( !hash[j] ) { temp = dis[now] >( len[now][j] + F )? dis[now] : len[now][j]; if( dis[j] > temp ) dis[j] = temp; } for(j=1,min = INT_MAX; j<=n; j++) if( !hash[j] && dis[j] + F < min ) min = dis[now = j]; hash[now] = 1; } printf("Scenario #%d/nFrog Distance = %.3f/n/n",count++,dis[2]); } return 0; }  

你可能感兴趣的:(distance)