赤裸裸的 最短路径,不过数据输入时,需要特殊处理一下……
#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
#define INF 999999
int a[101][101];
int dist[101];
int visit[101];
void dij( int v, int n)
{
int i, j;
int min=INF, temp;
for(i=0; i<n; i++)//初始化
{
dist[i]=a[v][i];
visit[i]=0;
}
visit[v]=1;//标记点v
for(i=1; i<n; i++)//循环直到所有最短路径求出
{
min=INF;
for(j=0; j<n; j++)//获取
{
if(visit[j]==0 && min>dist[j])
{
min=dist[j];
temp=j;
}
}
visit[temp]=1;
for(j=0; j<n; j++)//修改
{
if(visit[j]==0)
{
if(dist[temp]+a[temp][j]<dist[j])
dist[j]=dist[temp]+a[temp][j];
}
}
}
}
int main()
{
int n;
int i, j;
char value[5];
cin>>n;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
if(i!=j) a[i][j]=INF;
else a[i][j]=0;
}
for(i=0; i<n; i++)
for(j=0; j<i; j++)
{
cin>>value;
if( value[0]!='x')
a[i][j]=a[j][i]=atoi(value);
}
dij(0, n);
int max=0;
for(i=0; i<n; i++)
if(max<dist[i])
max=dist[i];
cout<<max<<endl;
}