9OJ-最短路径问题

http://ac.jobdu.com/problem.php?pid=1008

#include<iostream>
#include<cstdio>
#include<cstring>
#define INF 0xfffffff
using namespace std;
int map[1005][1005],money[1005][1005],dis[1005],pri[1005],sign[1005];
int main(void)
{
    int n,m,i,a,b,d,p,s,t,dmin,pmin,u;
    while(scanf("%d%d",&n,&m),n||m)
    {
         memset(map,-1,sizeof(map));
         memset(sign,0,sizeof(sign));
         while(m--)
         {
             scanf("%d%d%d%d",&a,&b,&d,&p);
             if(map[a][b]==-1||map[a][b]>d) 
             {
                 map[a][b]=map[b][a]=d;
                 money[a][b]=money[b][a]=p;
             }
             else if(map[a][b]==d&&money[a][b]>p)
                 money[a][b]=money[b][a]=p;
         }
         scanf("%d%d",&s,&t);
         for(i=1;i<=n;i++)
         {
             dis[i]=map[s][i];
             pri[i]=money[s][i];
         }
         sign[s]=1;
         dis[s]=pri[s]=0; 
         while(1)
         {
             dmin=pmin=INF;
             for(i=1;i<=n;i++)
                 if(!sign[i]&&dis[i]>0)
                 {
                     if(dis[i]<dmin) 
                     {
                         u=i; 
                        dmin=dis[u]; 
                     }
                     else if(dis[i]==dmin&&pri[i]<pmin) 
                     {
                         u=i; 
                        pmin=pri[u]; 
                     }
                 }
                 sign[u]=1;
                 if(u==t) 
                    break;
                 for(i=1;i<=n;i++)
                     if(!sign[i]&&map[u][i]>0)
                     {
                         if(dis[i]==-1||dis[u]+map[u][i]<dis[i])
                         {
                             dis[i]=dis[u]+map[u][i];
                             pri[i]=pri[u]+money[u][i];
                         }
                         else if(dis[u]+map[u][i]==dis[i]&&pri[u]+money[u][i]<pri[i])
                             pri[i]=pri[u]+money[u][i];
                     }
         }
         printf("%d %d\n",dis[t],pri[t]);
     } 
     return 0;
 }
posted @ 2012-08-30 22:32  Yogurt Shen  阅读(377)  评论(0)    收藏  举报