poj1502

最短路

View Code
#include <iostream>
#include 
<cstdio>
#include 
<cstdlib>
#include 
<cstring>
using namespace std;

#define inf 0x3f3f3f3f
#define maxn 105

int vis[maxn];
int cost[maxn][maxn];
int lowcost[maxn];
int n;

void dijkstra(int beg)
{
    
int i, j, min;
    memset(vis, 
0sizeof(vis));
    vis[beg] 
= 1;
    
for (i = 0; i < n; i++)
        lowcost[i] 
= cost[beg][i];
    lowcost[beg] 
= 0;
    
int pre = beg;
    
for (i = 1; i < n; i++)
    {
        min 
= inf;
        
for (j = 0; j < n; j++)
            
if (vis[j] == 0 && lowcost[pre] + cost[pre][j] < lowcost[j])
                lowcost[j] 
= lowcost[pre] + cost[pre][j];
        
for (j = 0; j < n; j++)
            
if (vis[j] == 0 && lowcost[j] < min)
            {
                min 
= lowcost[j];
                pre 
= j;
            }
        vis[pre] 
= 1;
    }
}

void input()
{
    
char st[100];
    
for (int i = 1; i < n; i++)
        
for (int j = 0; j < i; j++)
        {
            scanf(
"%s", st);
            
if (st[0== 'x')
                cost[i][j] 
= cost[j][i] = inf;
            
else
                cost[i][j] 
= cost[j][i] = atoi(st);
        }
}

int main()
{
    
//freopen("t.txt", "r", stdin);
    scanf("%d"&n);
    input();
    dijkstra(
0);
    
int ans = 0;
    
for (int i = 0; i < n; i++)
        ans 
= max(ans, lowcost[i]);
    printf(
"%d\n", ans);
    
return 0;
}
原文地址:https://www.cnblogs.com/rainydays/p/2106094.html