#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int N,M;
int map[1100][1100],dis[1100],visit[1100],exp[1100][1100],price[1100];
const int inf=0x7fffffff;
int dij(int x,int y)
{
int i,j,k,t,p;
for(i=1;i<=N;i++)
{
dis[i]=map[i][x];
visit[i]=0;
price[i]=exp[i][x];
}
dis[x]=0;
visit[x]=1;
for(i=1;i<=N;i++)
{
int t=inf;
for(j=0;j<=N;j++)
if(!visit[j]&&t>dis[j])
{
t=dis[j];
k=j;
}
visit[k]=1;
for(j=0;j<=N;j++)
{
if(!visit[j]&&map[k][j]!=inf)
if(dis[j]>=dis[k]+map[k][j])
{
dis[j]=dis[k]+map[k][j];
price[j]=price[k]+exp[k][j];
if(price[j]<price[k]+exp[k][j])
{
dis[j]=dis[k]+map[k][j];
price[j]=price[k]+exp[k][j];
}
}
}
}
printf("%d %d\n",dis[y],price[y]);
}
int main( )
{
while(scanf("%d%d",&N,&M)!=EOF,N|M)
{
int i,j,k,a,b,t,p,s,e;
memset(price,0,sizeof(price));
for(i=0;i<=N;i++)
for(j=0;j<=N;j++)
map[i][j]=inf,dis[i]=inf,exp[i][j]=inf;
for(i=0;i<M;i++)
{
scanf("%d%d%d%d",&a,&b,&t,&p);
if(t<map[a][b])
map[a][b]=map[b][a]=t,exp[a][b]=exp[b][a]=p;
}
scanf("%d%d",&s,&e);
dij(s,e);
}
return 0;
}
转载于:https://www.cnblogs.com/tangcong/archive/2011/04/30/2033601.html