poj1502
最短路
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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, 0, sizeof(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;
}
#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, 0, sizeof(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;
}