Problem Description
输入T组测试数据,每组测试数据,输入n,m分别代表n个城市,m条道路接下来m行,每行u,v,w分别代表u,v两城市之间道路承受的重量。
思路:让你求出从城市1到城市n最多能够运输最大重量,最短路的算法,改变下条件
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int Map[1005][1005], n;
int dist[1005], vis[1005];
void dijkstra()
{
int i, j;
for(i = 1; i <= n; i++)
{
dist[i] = Map[1][i];
vis[i] = 0;
}
vis[1] = 1;
int u;
for(i = 1; i < n; i++)
{
int Min = -1;
for(j = 1; j <= n; j++)
{
if(!vis[j] && Min < dist[j])//找出最大的边
{
Min = dist[j];
u = j;
}
}
if(Min == -1) break;
vis[u] = 1;
for(j = 1; j <= n; j++)
{
//起始点最多能够承受的最大重量和起始点到下一个点的承受重量,求最小(满足这个值,才能够装那么多重量的东西过去)如果大于下一个点的最多能够承受的最大重量。就更新
if(!vis[j] && dist[j] < min(Map[u][j], dist[u]))
dist[j] = min(Map[u][j], dist[u]);
}
}
}
int main()
{
int T, m, cas = 1, u, v, w;
scanf("%d", &T);
while(T--)
{
scanf("%d %d", &n, &m);
memset(Map, 0, sizeof(Map));
while(m--)
{
scanf("%d %d %d", &u, &v, &w);
if(Map[u][v] < w)//有重边
Map[u][v] = Map[v][u] = w;
}
dijkstra();
printf("Scenario #%d:\n", cas++);
printf("%d\n\n", dist[n]);
}
return 0;
}