Source Code Problem: 2253 User: zhouxc Memory: 300K Time: 0MS Language: G++ Result: Accepted Source Code #include "stdio.h" #include "math.h" #define M 1000 typedef struct TableEntery{ bool Known; double Dist; }; typedef struct Position{ int x; int y; }; int n,test=0; double length(int a,int b,Position v[M]) { return sqrt((v[a].x-v[b].x)*(v[a].x-v[b].x)+(v[a].y-v[b].y)*(v[a].y-v[b].y)); } void InitTable(TableEntery Table[M],Position v[M]) { for(int i=0;i<n;i++) { Table[i].Known=false; Table[i].Dist=length(i,0,v); //printf("%f/n",Table[i].Dist); } Table[0].Known=true; } void Dijkstra(TableEntery Table[M],Position v[M]) { int record; double min,max_step=0; while(true) { min=10000; for(int i=1;i<n;i++) { if(min>Table[i].Dist&&!Table[i].Known) { min=Table[i].Dist; // printf("%f %f/n",min,Table[i].Dist); record=i; // printf("%d/n",record); } } if(max_step<min) max_step=min; //printf("%f/n",max_step); //printf("%f/n",Table[record].Dist); if(record==1) break; Table[record].Known=true; for(int j=1;j<n;j++) { if(!Table[j].Known) { if(Table[j].Dist>length(record,j,v)) { Table[j].Dist=length(record,j,v); //printf("%f/n",Table[j].Dist); } } } } printf("Frog Distance = %.3f/n/n",max_step); } int main() { while(scanf("%d",&n)&&n!=0) { Position v[M]; TableEntery Table[M]; for(int i=0;i<n;i++) scanf("%d%d",&v[i].x,&v[i].y); printf("Scenario #%d/n",++test); InitTable(Table,v); Dijkstra(Table,v); } return 0; }