一道水题,根据题给的数据的大小以及时间,用数组是可以过得,记得以前看过别人的用数组但是用邻接表的思路写的,下次我也试一试!
#include<iostream>
#include<queue>
using namespace std;
int a[1005][1005],n,m,x;
int len1[1005],len2[1005];
void go()//
{
int i,t;
len1[x]=0;//付给初值为0
queue<int>q;
q.push(x);
while(q.empty()==false)
{
t=q.front();
q.pop();
for(i=1; i<=n; i++)
{
if(len1[t]+a[i][t]<len1[i])
{
len1[i]=len1[t]+a[i][t];
q.push(i);//进行赋给的
}
}
}
}
void back()
{
int i,t;
len2[x]=0;
queue<int>q;
q.push(x);
while(q.empty()==false)
{
t=q.front();
q.pop();
for(i=1; i<=n; i++)
{
if(a[t][i]+len2[t]<len2[i])
{
len2[i]=len2[t]+a[t][i];
q.push(i);
}
}
}
}
int main()
{
int i,j;
cin>>n>>m>>x;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
a[i][j]=100000;
len1[i]=len2[i]=100000;
}
int p,q,r;
for(i=1; i<=m; i++)
{
cin>>p>>q>>r;
a[p][q]=r;//这个是方向的
}
go();
back();
int min=0;
for(i=1; i<=n; i++)
{
if(len1[i]+len2[i]>min)
min=len1[i]+len2[i];
}
cout<<min<<endl;
return 0;
}