最短路径问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 13577    Accepted Submission(s): 4156

Problem Description
给你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
 
 
代码:

#include <stdio.h>
#include <string.h>
#define maxnum 1005
#define maxint 999999
int dist[maxnum],hua[maxnum],c[maxnum][maxnum],d[maxnum][maxnum];
int n;

void dijkstra(int x,int y)
{
 int i,j;
 bool v[maxnum]={0};
 memset(dist,maxint,sizeof(dist));
    memset(hua,maxint,sizeof(hua));
 v[x]=1;
    dist[x]=0;
 hua[x]=0;
 for(i=1;i<=n;i++)
 {
  int u=x;
  int min=maxint;
  for(j=1;j<=n;j++)
  {
   if(dist[j]<min&&!v[j])
   {
                min=dist[j];
    u=j;
   }
  }
  v[u]=1;
  for(j=1;j<=n;j++)
  {
   if(!v[j]&&dist[j]>dist[u]+c[u][j])
   {
    dist[j]=dist[u]+c[u][j];
    hua[j]=hua[u]+d[u][j];
   }
   if(!v[j]&&dist[j]==dist[u]+c[u][j]&&hua[j]>hua[u]+d[u][j])
   {
    hua[j]=hua[u]+d[u][j];
   }
  }
 }
}

int main()
{
 int m,x,y,p,q,k,a,b;
 while(scanf("%d%d",&n,&m)&&(n&&m))
 {
  int i,j;
  for(i=1;i<=n;i++)
  {
      for(j=1;j<=n;j++)
   {
       c[i][j]=maxint;
       d[i][j]=maxint;
   }
  }
  for(i=1;i<=m;i++)
  {
   scanf("%d%d%d%d",&x,&y,&p,&q);
   if(p<c[x][y])
   {
       c[x][y]=p;
       c[y][x]=p;
       d[x][y]=q;
       d[y][x]=q;
   }
   if(p==c[x][y]&&q<d[x][y])
   {
    d[x][y]=q;
    d[y][x]=q;
   }
  }
  scanf("%d%d",&a,&b);
  dijkstra(a,b);
  printf("%d %d\n",dist[b],hua[b]);
 }
 return 0;
}

hdoj(3790) 最短路径的更多相关文章

  1. hdoj 3790 最短路径问题

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  2. ACM: HDU 3790 最短路径问题-Dijkstra算法

    HDU 3790 最短路径问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Des ...

  3. HDU - 3790 最短路径问题 (dijkstra算法)

    HDU - 3790 最短路径问题 Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费 ...

  4. HDOJ 3790

    dijstra最短路径算法 : 9885560 2013-12-23 23:54:56 Accepted 3790 203MS 8112K 1343 B C++ 泽泽 #include<cstd ...

  5. POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你 ...

  6. HDU ACM 3790 最短路径问题

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. HDU 3790最短路径问题 [最短路最小花费]

    题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3790] 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)  ...

  8. hdu 3790 最短路径问题(双重权值,dijkstra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...

  9. hdu 3790 最短路径问题(两个限制条件的最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=3790 有两个条件:距离和花费.首先要求距离最短,距离相等的条件下花费最小. dijkstra,仅仅是在推断条件时 ...

随机推荐

  1. python 正则表达式 贪婪模式的简介和匹配时的几种模式

    看到一篇文章,关于python正则的,http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 贪婪模式与非贪婪模式: 正则表达式通常用于 ...

  2. List<T>的IndexOf方法和Remove方法

    Microsoft地址 List<T>的IndexOf()方法 如果T是值类型的,就按照比较值的方法从列表的第一个元素开始逐个匹配,如果T是引用类型,就比较引用是否相同 举例如下: cla ...

  3. Get familiar with key Frameworks of ios

    Frameworks make your life easier as an iOS Developer. They allow you to reuse code written by other ...

  4. hdoj 2147 kiki's game【博弈】

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total ...

  5. 自己封装的C#操作redis公共类

    关于C#操作redis公共类,网上有很多版本,每个版本我都看了,发觉还是不够完美,都存在一个问题,只能操作单一的缓存数据库 redis指令支持上,这里可以自己去扩展,下面分享下我近期封装的一个redi ...

  6. Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 10

    今天编译一个project,我设置为api 14,可是编译报错: Using 1.7 requires compiling with Android 4.4 (KitKat); currently u ...

  7. Look and say numbers

    地址:http://www.codewars.com/kata/53ea07c9247bc3fcaa00084d/train/python There exists a sequence of num ...

  8. 关于编译Lambda时报告返回的为void的错误

    这个错误的信息是这样的: a lambda that has been specified to have a void return type cannot return a value 报告错误的 ...

  9. kernel笔记:TCP参数

    http://blog.chinaunix.net/uid-27119491-id-3346430.html 本文将介绍网络连接建立的过程.收发包流程,以及其中应用层.tcp层.ip层.设备层和驱动层 ...

  10. 线程本地存储(Thread Local Storage, TLS)简单分析与使用

    在多线程编程中, 同一个变量, 如果要让多个线程共享访问, 那么这个变量可以使用关键字volatile进行声明; 那么如果一个变量不想使多个线程共享访问, 那么该怎么办呢? 呵呵, 这个办法就是TLS ...