最短路径问题

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

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
dijkstra算法
#include<stdio.h>
#include<string.h>
#define max 1100
#define INF 0x3f3f3f
int point;
int begin,end;
int lowdis[max],map[max][max],visit[max];
int lowcost[max];
int map1[max][max];//记录第i个点到其余所有点的花费
void dijkstra()
{
int mindis,next,j,i,mincost,l;
memset(visit,0,sizeof(visit));
for(i=1;i<=point;i++)
{
lowdis[i]=map[begin][i];
lowcost[i]=map1[begin][i];
}
visit[begin]=1;
for(i=1;i<point;i++)
{
mindis=INF;
for(j=1;j<=point;j++)
{
if(!visit[j]&&mindis>lowdis[j])
{
mindis=lowdis[j];
next=j;
}
}
visit[next]=1;
for(j=1;j<=point;j++)
{
if(!visit[j])
{
if(lowdis[j]==map[next][j]+lowdis[next])//这里要考虑两个点之间多条通路距离相等的问题
{
if(lowcost[j]>map1[next][j]+lowcost[next])
{
lowcost[j]=map1[next][j]+lowcost[next];//记下在通路距离相等情况下花费最少的
lowdis[j]=map[next][j]+lowdis[next];
}
}
else if(lowdis[j]>map[next][j]+lowdis[next])//两个点 只有一条通路
{
lowdis[j]=map[next][j]+lowdis[next];
lowcost[j]=map1[next][j]+lowcost[next];
}
}
}
}
printf("%d %d\n",lowdis[end],lowcost[end]);
}
int main()
{
int n,m,a,b,d,p,j,i;
while(scanf("%d%d",&point,&m)&&point!=0&&m!=0)
{
for(i=1;i<=point;i++)
{
for(j=1;j<=point;j++)
{
if(i==j)
{
map[i][j]=0;
map1[i][j]=0;
}
else
{
map[i][j]=map[j][i]=INF;
map1[i][j]=map1[j][i]=INF;
}
}
}
while(m--)
{
scanf("%d%d%d%d",&a,&b,&d,&p);
if(map[a][b]>d)
{
map[a][b]=map[b][a]=d;
map1[a][b]=map1[b][a]=p;
}
else if(map[a][b]==d&&map1[a][b]>p) //此题的输入就要加上两点之间可能有多条通路距离相等的数据
map1[a][b]=map1[b][a]=p; //
}
scanf("%d%d",&begin,&end);
dijkstra();
}
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. linux为命令取别名

    在linux的命令中,有些命令很长并且经常使用到,我们可以为命令添加一个别名,格式如下: $ alias 别名='命令' 例如: # 列出home文件夹的文件 $ alias lsh='ls -l / ...

  2. shell中截取字符串的方法总结

    shell中截取字符串的方法有很多种, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...

  3. 我见过的 Objective-C, 讲的最通俗易懂的入门教程....

    http://www.cnblogs.com/mjios/category/454764.html  ---- 给力...

  4. Spring整合freemarker发送邮件

    转载:http://blog.csdn.net/zdp072/article/details/32745335 分类: freemarker spring 2014-06-20 23:39 752人阅 ...

  5. 精选7款绚丽的HTML5和jQuery图片动画特效

    在HTML5出现后,图片就变得更加富有动感了,各种图片动画特效也层出不穷,例如图片播放器.图片导航.3D图片动画等等.本文将精选几款具有代表性的HTML5和jQuery图片动画特效,绚丽的画面.实用的 ...

  6. STM32硬件复位时间

    两个参数,,1低电平时间 2低电平压值 1.stm32复位时间 ------  低电平时间:1.5 至 4.5 ms   2.压值

  7. AIDL与stub

     Stub翻译成中文是存根的意思,注意Stub对象是在被调用端进程,也就是服务端进程,至此,服务端aidl服务端得编码完成了.  stub是为了方便client,service交互而生成出来的代码.A ...

  8. 【转】Picasso – Android系统的图片下载和缓存类库

    来源:http://blog.chengyunfeng.com/?p=492 另一篇参考:http://blog.csdn.net/xu_fu/article/details/17043231 Pic ...

  9. C++中巧妙的位运算

    位运算要多想到与预算和异或运算,并常常将两个数对应位上相同和不同分开处理 一.x&(x-1)消除x二进制中最右边的一个1. 这个比较厉害,比如统计某个 二.与和异或的巧妙结合的思想 与运算可以 ...

  10. 关于C#控制台传递参数和接收参数

    前言: 写了这么久程序,今天才知道的一个基础知识点,就是程序入口 static void Main(string[] args) 里的args参数是什么意思 ?惭愧... 需求: 点击一个button ...