#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define Max 0x3f3f3f3f
using namespace std;
const int maxn = 107;
int map[maxn][maxn];
bool vis[maxn];
int D[maxn];
void dijk(int n)
{
memset(vis, 0, sizeof(vis));
vis[0] = 1;
while (true)
{
int t = Max;
int tpos = -1;
for (int i = 0; i < n; i++)
{
if (!vis[i] && t > D[i])
{
t = D[i];
tpos = i;
}
}
if (tpos == -1)
{
break;
}
else
{
vis[tpos] = 1;
for (int i = 0; i < n; i++)
{
int tt = t + map[tpos][i];
if (!vis[i] && tt < D[i])
{
D[i] = tt;
}
}
}
}
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) map[i][i] = 0;
for (int i = 1; i < n; i++)
{
for (int j = 0; j < i; j++)
{
char s[100];
scanf("%s", s);
if (s[0] == 'x')
{
map[i][j] = map[j][i] = Max;
}
else
{
int t;
sscanf(s, "%d", &t);
map[i][j] = map[j][i] = t;
}
}
}
for (int i = 0; i < n; i++)
{
D[i] = map[0][i];
}
dijk(n);
int ans = 0;
for (int i = 0; i < n; i++)
{
ans = max(ans, D[i]);
}
cout << ans << endl;
return 0;
}
POJ1502最简单的dijk算法应用+sscanf(cstring,"%d",&t)处理技巧
最新推荐文章于 2023-01-15 21:44:32 发布