UVA 423

来源:互联网 发布:假面骑士空我 知乎 编辑:程序博客网 时间:2024/06/06 20:20

题目大意:输出n,表示有n个点,完整的图为一个矩阵,相当于二维数组a[n][n]的样子,a[i][j]就是i点到j点的距离。其中只给出了下三角,x表示亮点直接不连通。输出用最短方式从1走到其他点,其中最远的距离。

解题思路:dijkstra,最基本的单源点问题。

ac代码:

#include <iostream>#include <cstring>#define inf 100005using namespace std;int n, dis[105], w[105][105], t1, t2, vis[105], Max;char a[105];int main(){while (scanf("%d", &n)!=EOF){memset(vis, 0, sizeof(vis));for (int i=1; i<=n; i++)w[i][i] = 0, dis[i] = inf;for (int i=2; i<=n; i++){for (int j=1; j<i; j++){scanf("%s", a);if (a[0] == 'x')w[i][j] = w[j][i] = inf;else{sscanf(a, "%d", &w[i][j]);w[j][i] = w[i][j];}}}for (int i=2; i<=n; i++)dis[i] = w[1][i];vis[1] = 1;for (int i=0; i<n; i++){t1 = inf;for (int j=2; j<=n; j++)if (dis[j] < t1 && !vis[j])t1 = dis[j], t2 = j;vis[t2] = 1;for (int j=2; j<=n; j++)dis[j] = min(dis[j], t1+w[j][t2]);}Max = dis[2];for (int i=3; i<=n; i++)Max = max(Max, dis[i]);printf("%d\n", Max);}return 0;}


原创粉丝点击