最短路径问题(HDU3790)

简介: 最短路径问题(HDU3790)

题目:

给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,

如果最短距离有多条路线,则输出花费最少的。

Input

输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。

(1<n<=1000, 0<m<100000, s != t)

Output

输出 一行有两个数, 最短距离及其花费。

Sample Input

3 2
1 2 5 6
2 3 4 5
1 3
0 0

Sample Output

9 11

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3790

题目描述: n个点,m条边,连接起点到终点的最短路径及其花费。

解题思路: 这是一个双权值的最短路径问题,注意在路径相同的情况下要花费最少的情况。

程序代码:

#include<stdio.h>
#include<string.h>
int e[1010][1010],dis[2020],book[2020],a[1010][1010],val[2020];
int inf=999999999;
int main()
{
  int i,j,n,m,t1,t2,t3,t4,u,v,min,s,t;
  while(scanf("%d%d",&n,&m)!=EOF)
  {
    if(n==0&&m==0)
      break;
    memset(e,inf,sizeof(e));
    for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
        if(i==j)  e[i][j]=0;
        else    e[i][j]=inf;
    for(i=1;i<=m;i++)
    {
      scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
      if(e[t1][t2]>t3)//可能多条路径输入多次,要距离最短的一次
      {
        e[t1][t2]=e[t2][t1]=t3;
        a[t1][t2]=a[t2][t1]=t4;
      } 
    }
    scanf("%d%d",&s,&t);
    for(i=1;i<=n;i++)
    {
      dis[i]=e[s][i];
      val[i]=a[s][i];
    }
    dis[s]=0;
    val[s]=0; 
    memset(book,0,sizeof(book));
    book[s]=1;
    for(i=1;i<n;i++)
    {
      min=inf;
      for(j=1;j<=n;j++)
      {
        if(book[j]==0&&dis[j]<min)
        {
          min=dis[j];
          u=j;
        }
      }
      book[u]=1;
      for(v=1;v<=n;v++)
      {
        if(e[u][v]<inf)
        {
          if(dis[v]>dis[u]+e[u][v])
          {
            dis[v]=dis[u]+e[u][v];
            val[v]=val[u]+a[u][v];
          }
          else if(dis[v]==dis[u]+e[u][v]&&val[v]>val[u]+a[u][v])//路径相同的情况下,要花费最少的。
            val[v]=val[u]+a[u][v];  
        }
      }
    }
    printf("%d %d\n",dis[t],val[t]);  
  }
  return 0;
} 
相关文章
HDU-1874,畅通工程续(Floyd最短路)
HDU-1874,畅通工程续(Floyd最短路)
|
算法 机器学习/深度学习
|
并行计算 算法 Java
HDU 1874 畅通工程续【Floyd算法实现】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 53806    Accepted Submission(s): 20092 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。
1086 0
最短路径-zoj-2797
zoj-2797-106 miles to Chicago In the movie "Blues Brothers", the orphanage where Elwood and Jack were raised may be sold to the Board of Education if they do not pay 5000 dollars in taxes at the 
1190 0