题意:求信息从第一个点发送至其他所有点所需的最小时间。以下三角的形式输入,若不能从 i 传至 j, 则用x表示。
题解:需要注意输入。
#include <iomanip>
#include <iostream>
using namespace std;
#define INF 200000000
int map[101][101], n;
int mark[101], dist[101];
int Dijkstra ()
{
int i, j, k, min, max;
memset(mark,0,sizeof(mark));
for ( i = 1; i <= n; i++ )
dist[i] = map[1][i];
dist[1] = 0;
mark[1] = 1;
for ( i = 1; i <= n; i++ )
{
min = INF;
for ( j = 1; j <= n; j++ )
if ( !mark[j] && dist[j] < min )
{
k = j;
min = dist[j];
}
if ( min == INF ) break;
mark[k] = 1;
dist[k] = min;
for ( j = 1; j <= n; j++ )
if ( !mark[j] && dist[k] + map[k][j] < dist[j] )
dist[j] = dist[k] + map[k][j];
}
max = 0;
for ( i = 1; i <= n; i++ )
if ( dist[i] > max )
max = dist[i];
return max;
}
int main()
{
cin >> n;
int i, j, num;
for ( i = 2; i <= n; i++ )
{
for ( j = 1; j < i; j++ )
{
cin >> num;
if ( cin.fail () )
{
map[i][j] = map[j][i] = INF;
cin.clear ();
cin.get ();
}
else
map[i][j] = map[j][i] = num;
}
}
cout << Dijkstra () << endl;
return 0;
}