题目大意
说的那么复杂,其实就是给出一幅图,找出从0点出发的单源最短路径中的最长的路径
思路:Dijkstra直接搞定
代码:
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
using namespace std;
#define SIZE 100
int N;
int graph[SIZE][SIZE] = {};
int minDist[SIZE] = {};
bool kickOut[SIZE] = {};
int Dijkstra()
{
kickOut[0] = true;
memcpy(minDist,graph[0],sizeof(graph[0]));
int minD,flag;
for(int i=1;i<N;i++)
{
minD = SHRT_MAX;
flag = 0;
for(int j=0;j<N;j++)
if(!kickOut[j] && minDist[j] < minD)
{
minD = minDist[j];
flag = j;
}
kickOut[flag] = true;
for(int j=0;j<N;j++)
if(!kickOut[j] && (graph[flag][j] + minDist[flag] < minDist[j]))
minDist[j] = graph[flag][j] + minDist[flag];
}
return minD;
}
int main()
{
cin >> N;
for(int i=0;i<N-1;i++)
for(int j=0;j<=i;j++)
{
char data[10] = {};
cin >> data;
if(data[0] == 'x')
graph[i+1][j] = graph[j][i+1] = SHRT_MAX;
else
graph[i+1][j] = graph[j][i+1] = atoi(data);
}
cout << Dijkstra() << endl;
return 0;
}