hdoj--3790--最短路径问题(双权值迪杰斯特拉)
最短路径问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 19982 Accepted Submission(s): 5945
(1<n<=1000, 0<m<100000, s != t)
3 2
1 2 5 6
2 3 4 5
1 3
0 0
9 11
#include<stdio.h>
#include<string.h>
#define INF 0xfffffff
int mapd[1010][1010],mapp[1010][1010],vis[1010];
int d1[1010],d2[1010],m,n;
void dijkstra(int v)
{
int i,j,k;
vis[v]=1;
for(i=1;i<=m;i++)
{
d1[i]=mapd[v][i];
d2[i]=mapp[v][i];
}
for(i=0;i<m;i++)
{
int min=INF;
k=-1;
for(j=1;j<=m;j++)
{
if(!vis[j]&&d1[j]<min)
{
k=j;
min=d1[j];
}
}
if(k==-1) break;
vis[k]=1;
for(j=1;j<=m;j++)
{
if(!vis[j]&&d1[j]>d1[k]+mapd[k][j])
{
d1[j]=d1[k]+mapd[k][j];
d2[j]=d2[k]+mapp[k][j];
}
if(!vis[j]&&d1[j]==d1[k]+mapd[k][j]&&d2[j]>d2[k]+mapp[k][j])
{
d2[j]=d2[k]+mapp[k][j];
}
}
}
}
int main()
{
int i,j,k,s,e;
while(scanf("%d%d",&m,&n),m||n)
{
for(i=0;i<=m;i++)
for(j=0;j<=m;j++)
{
mapd[i][j]=mapd[j][i]=INF;
mapp[i][j]=mapp[j][i]=INF;
}
int a,b,c,d;
memset(vis,0,sizeof(vis));
memset(d1,0,sizeof(d1));
memset(d2,0,sizeof(d2));
while(n--)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
if(c<mapd[a][b])
{
mapd[a][b]=mapd[b][a]=c;
mapp[a][b]=mapp[b][a]=d;
}
}
scanf("%d%d",&s,&e);
dijkstra(s);
printf("%d %d\n",d1[e],d2[e]);
}
return 0;
}
hdoj--3790--最短路径问题(双权值迪杰斯特拉)的更多相关文章
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...
- [链接]最短路径的几种算法[迪杰斯特拉算法][Floyd算法]
最短路径—Dijkstra算法和Floyd算法 http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算 ...
- 最短路径之迪杰斯特拉(Dijkstra)算法
对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...
- 最短路径 - 迪杰斯特拉(Dijkstra)算法
对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- 迪杰斯特拉(Java)
public class Dijsktra { public static void main(String[] args) { Dijsktra d=new Dijsktra(); int[][] ...
- HDU 3790(两种权值的迪杰斯特拉算法)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3790 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- 最短路径之迪杰斯特拉(Dijkstra)算法
迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...
随机推荐
- Android基础TOP4_1:点击物理按钮弹出退出提示框
JAVA: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedIns ...
- [Windows Server 2008] Ecshop安全设置
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:ECSHO ...
- phpCURL抓取网页内容
参考代码1:<?php // 创建一个新cURL资源 $ch = curl_init(); // 设置URL和相应的选项 curl_setopt($ch, CURLOPT_URL, " ...
- php 在不知道字符串有多长的情况下,如何去除前三个字符?
$string='字符串';$subject=substr_replace(string,'',0,3);
- Linux快速入门教程-进程管理ipcs命令学习
使用Linux系统必备的技能之一就是Linux进程管理,系统运行的过程正是无数进程在运行的过程.这些进程的运行需要占用系统的内存等资源,做好系统进程的管理,对于我们合理分配.使用系统资源有非常大的意义 ...
- isset在php5.6-和php7.0+的一些差异
今天在公司实现一个模块功能时写了如下代码: class ProductCategory { const TYPES = [ 1 => 'type1', 2 => 'type2', ]; p ...
- odoo api介绍
odoo api修饰器介绍与应用 参考文档:https://www.cnblogs.com/kfx2007/p/6093994.html 一.one one的用法主要用于self为单一集合的情况,被o ...
- AIM Tech Round (Div. 2)——ABCD
http://codeforces.com/contest/624 A.python是用来写div2的AB题的... a, b, x, y = map(float, raw_input().split ...
- 小记——GTMD校园网
前言 学校一年前开通了校园网,然鹅信号未覆盖我们住的公寓,又多忍受了一年的小破宽带(10M带宽,100块300个小时) 上个星期,架设了一年的校园网终于通了,然后我们发现——校园网69元一个月,一个用 ...
- 最短路径--Floyd算法
Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被 ...