me的代码(某而思teacher教的):
#include<bits/stdc++.h>
using namespace std;
int n,m,v[110][110],dis[110],t,pre[110];
bool falg[110];
void dj()
{
for(int i = 1;i<n;i++)
{
for(int j = 1;j<=n;j++)
{
if(v[t][j]>0&&dis[t]+v[t][j]<dis[j])
{
dis[j] = dis[t] + v[t][j];
pre[j] = t;
}
}
int x = 1e10;
for(int j = 1;j<=n;j++)
{
if(dis[j]<x&&!falg[j])
{
x = dis[j];
t = j;
}
}
falg[t] = 1;
}
}
int main()
{
int ans1 = 0,ans2 = 0;
scanf("%d %d",&n,&m);
for(int i = 1;i<=m;i++)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
v[x][y] = z;
v[y][x] = z;
}
memset(dis,0x3f3f3f3f,sizeof(dis));
t = 1;
falg[1] = 1;
pre[1] = 0;
dis[1] = 0;
dj();
ans1 = dis[n];
int x = n;
while(pre[x]!=0)
{
v[x][pre[x]] *= 2;
v[pre[x]][x] *= 2;
memset(dis,0x3f3f3f3f,sizeof(dis));
memset(falg,0,sizeof(falg));
t = 1;
falg[1] = 1;
dis[1] = 0;
dj();
ans2 = max(ans2,dis[n]);
v[x][pre[x]] /= 2;
v[pre[x]][x] /= 2;
x = pre[x];
}
printf("%d\n",ans2-ans1);
}