这道题有助于理解迪杰斯特拉的本质,感觉该算法更像是一种遍历图的思想而不仅仅是用来求最短路
题意是,每一条路径都有一个跳的最大值,比如在某一条路径中,跳的距离依次是2 3 1 6 5 那么这个最大值就是6. 任务是找出所有路径的最大值中的最小值
用d[j]表示从起始点到该点所有路径最大值中的最小值。
#include<math.h>
#include<stdio.h>
#include<string.h>
#define max(a,b) (a>=b?a:b)
#define MAX 1000
int n, x, y;
int T=1;
int mark[MAX];
double d[MAX];
struct point{
int x, y;
};
struct point po[MAX];
void getpo(){
int i;
for(i=1;i<=n;i++){
scanf("%d %d",&x,&y);
po[i].x=x;
po[i].y=y;
}
}
double getdis(struct point a,struct point b){
double dis=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
return dis;
}
void dijkstra(){
int k, i, j;
double min;
memset(mark,0,sizeof(mark));
for(i=1;i<=n;i++)
d[i]=MAX;
d[1]=0;
for(i=1;i<=n;i++){
min=MAX;
for(j=1;j<=n;j++){
if(!mark[j]&&min>d[j]){
min=d[j];
k=j;
}
}
if(k==2) break;
mark[k]=1;
for(j=1;j<=n;j++){
if(!mark[j] && d[j]>max(getdis(po[k],po[j]),d[k]))
d[j]=max(getdis(po[k],po[j]),d[k]);
}
}
printf("Scenario #%d\nFrog Distance = %.3lf\n\n",T++,d[2]);
}
int main(){
while(scanf("%d",&n)&&n!=0){
getpo();
dijkstra();
}
return 0;
}
但是不知道为什么这道题用c过了用c++就wa...