当成有向图了。。。。。。,其实是无向图,晕~。
bfs版本(其实也可以用最短路来做)
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <map>
using namespace std;
#define INF 0x3f3f3f3f
int L[512][512];
int M[512][512];
int n,m,s,d;
bool book[512];
int sum[512];
int step[512];
int bfs()
{
queue<int>Q;
memset(book,false,sizeof(book));
step[s]=0;
sum[s]=0;
Q.push(s);
while(!Q.empty())
{
int temp=Q.front();
Q.pop();
book[temp]=true;
for(int i=0;i<n;i++)
{
if(!book[i]&&L[temp][i]<INF)
{
Q.push(i);
if(step[i]>step[temp]+L[temp][i])
{
step[i]=step[temp]+L[temp][i];
sum[i]=sum[temp]+M[temp][i];
}
else if(step[i]==step[temp]+L[temp][i]&&sum[i]>sum[temp]+M[temp][i])
{
sum[i]=sum[temp]+M[temp][i];
}
}
}
}
cout<<step[d]<<" "<<sum[d]<<endl;
}
int main()
{
cin>>n>>m>>s>>d;
int u,v,l,mo;
memset(L,INF,sizeof(L));
memset(M,INF,sizeof(M));
memset(sum,INF,sizeof(sum));
memset(step,INF,sizeof(step));
for(int i=0;i<=n;i++)
{
L[i][i]=0;
M[i][i]=0;
}
for(int i=1;i<=m;i++)
{
cin>>u>>v>>l>>mo;
L[u][v]=L[v][u]=l;
M[u][v]=M[v][u]=mo;
}
bfs();
return 0;
}