和dij求最短路径有异曲同工之妙吧,类比一下就好了,还wrong answer了3次,泪奔.........
#include<stdio.h>
#include<iostream>
using namespace std;
const int INF=9999999;
int Dij(int n);
int wei[1001][1001],dis[1001];
bool visited[1001];
int main(){
int t,n,m,w,x,y;
scanf("%d",&t);
for(int i=1;i<=t;i++){
printf("Scenario #%d:\n",i);
scanf("%d%d",&n,&m);
for(int j=0;j<n;j++){
visited[j]=false;
for(int k=0;k<n;k++)
wei[j][k]=-1;
wei[j][j]=INF;
}
for(int j=0;j<m;j++){
scanf("%d%d%d",&x,&y,&w);
x--; y--;
if(wei[x][y]<w){
wei[x][y]=w;
wei[y][x]=w;
}
}
for(int j=0;j<n;j++)
dis[j]=-1;
dis[0]=INF;
Dij(n);
printf("%d\n\n",dis[n-1]);
}
system("pause");
return 0;
}
int Dij(int n){
int order;
for(int i=0;i<n;i++){
int Max=-2;
for(int j=0;j<n;j++){
if(visited[j]==false&&dis[j]>Max){
Max=dis[j];
order=j;
}
}
visited[order]=true;
for(int j=0;j<n;j++){
int tmp;
if(wei[order][j]>dis[order])
tmp=dis[order];
else
tmp=wei[order][j];
if(visited[j]==false&&tmp>dis[j])
dis[j]=tmp;
}
}
return 0;
}