标签:
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:5480
解决:1757
1 #include <iostream> 2 using namespace std; 3 int INF=99999999; 4 5 struct lnode{ 6 int data; 7 int cost; 8 }; 9 10 lnode mx[1001][1001]; 11 12 int main() 13 { 14 int i,j; 15 int n,m,a,b,dd,p,s,t; 16 int v[1001],d[1001],c[1001];//v 是否访问过 d【i】 起点开始到i的最短距离 c【i】 花费 17 18 19 while(cin>>n) 20 { 21 cin>>m; 22 if(n==0 && m==0) break; 23 for(i=1;i<=n;++i) 24 for(j=1;j<=n;++j) 25 mx[i][j].data=mx[i][j].cost=INF; 26 for(i=0;i<m;++i) 27 { 28 cin>>a>>b>>dd>>p; 29 mx[a][b].data=mx[b][a].data=dd; 30 mx[a][b].cost=mx[b][a].cost=p; 31 32 } 33 cin>>s>>t; 34 35 for(i=1;i<=n;++i) v[i]=0; 36 37 38 for(i=1;i<=n;++i) 39 c[i]=d[i]=(i==s?0:INF);//从s开始 40 41 42 for(i=0;i<n;++i) 43 { 44 int x,m=INF;//选点 45 for(j=1;j<=n;++j) 46 if(!v[j] && d[j]<m) 47 { 48 m=d[j]; 49 x=j; 50 } 51 52 v[x]=1;//入点 53 54 55 for(j=1;j<=n;j++)//更新 56 { 57 if(d[j]>=d[x]+mx[x][j].data) 58 { 59 d[j]=d[x]+mx[x][j].data; 60 if(c[j]>c[x]+mx[x][j].cost) 61 c[j]=c[x]+mx[x][j].cost; 62 } 63 } 64 } 65 cout<<d[t]<<" "<<c[t]<<endl; 66 } 67 return 0; 68 }
标签:
原文地址:http://www.cnblogs.com/xiaoyesoso/p/4265125.html