最短路径HDU3790(Dijkstra)
准备考研,荒废了好多东西,希望做了正确的决定
/*********************************************************
*author:chen xin
*email:cx2pirate@gmail.com
*date:2014.09.09
* *******************************************************/ #include <stdio.h>
#include <memory.h> #define MAXINT 0x7fffffff
#define MAXN 1005 typedef struct{
int dis,cost;
}RECORD; RECORD record[MAXN];
RECORD map[MAXN][MAXN];
int vis[MAXN]; // O(v + e)
void init(int n);
RECORD dijkstra(int n,int m,int f,int t); int main(void)
{
int n,m,f,t;
int u,v,dis,cost; while(scanf("%d%d",&n,&m) && n && m){ init(n); for(int i = ;i < m;i++){
scanf("%d%d%d%d",&u,&v,&dis,&cost); if(map[u][v].dis > dis || map[u][v].dis == dis && map[u][v].cost > cost){
map[u][v].dis = map[v][u].dis = dis;
map[u][v].cost = map[v][u].cost = cost;
}
}
scanf("%d%d",&f,&t); RECORD res = dijkstra(n,m,f,t); printf("%d %d\n",res.dis,res.cost);
} return ;
} void init(int n)
{
for(int i = ;i <= n;i++){ vis[i] = ;
record[i].dis = record[i].cost = MAXINT;
for(int j = ;j <= n;j++){
map[i][j].dis = map[i][j].cost = MAXINT;
}
}
} int relaxable(RECORD u,RECORD v,RECORD edge)
{
if((u.dis + edge.dis) < v.dis){
return ;
}
if(u.dis + edge.dis == v.dis &&
u.cost + edge.cost < v.cost){
return ;
}
return ;
} RECORD dijkstra(int n,int m,int f,int t)
{
record[f].dis = record[f].cost = ; for(int i = ;i <= n;i++){ int min,min_dis = MAXINT,min_cost = MAXINT;
for(int j = ;j <= n;j++){ if(!vis[j] && (record[j].dis < min_dis ||
record[j].dis == min_dis && record[j].cost < min_cost))
{
min = j;
min_dis = record[j].dis;
min_cost = record[j].cost;
} } vis[min] = ;
for(int k = ;k <= n;k++){ if(!vis[k] && map[min][k].dis < MAXINT &&
relaxable(record[min],record[k],map[min][k]))
{
record[k].dis = record[min].dis + map[min][k].dis;
record[k].cost = record[min].cost + map[min][k].cost;
} }
} return record[t];
} //11626983 2014-09-09 23:02:13 Accepted 3790 312MS 8144K 2232 B G++ 超级旅行者
最短路径HDU3790(Dijkstra)的更多相关文章
- 最短路径算法Dijkstra和A*
在设计基于地图的游戏,特别是isometric斜45度视角游戏时,几乎必须要用到最短路径算法.Dijkstra算法是寻找当前最优路径(距离原点最近),如果遇到更短的路径,则修改路径(边松弛). Ast ...
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson
根据DSqiu的blog整理出来 :http://dsqiu.iteye.com/blog/1689163 PS:模板是自己写的,如有错误欢迎指出~ 本文内容框架: §1 Dijkstra算法 §2 ...
- 单源最短路径(dijkstra算法)php实现
做一个医学项目,当中在病例评分时会用到单源最短路径的算法.单源最短路径的dijkstra算法的思路例如以下: 如果存在一条从i到j的最短路径(Vi.....Vk,Vj),Vk是Vj前面的一顶点.那么( ...
- 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)
一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ...
- 最短路径之Dijkstra算法和Floyd-Warshall算法
最短路径算法 最短路径算法通常用在寻找图中任意两个结点之间的最短路径或者是求全局最短路径,像是包括Dijkstra.A*.Bellman-Ford.SPFA(Bellman-Ford的改进版本).Fl ...
- 【算法设计与分析基础】25、单起点最短路径的dijkstra算法
首先看看这换个数据图 邻接矩阵 dijkstra算法的寻找最短路径的核心就是对于这个节点的数据结构的设计 1.节点中保存有已经加入最短路径的集合中到当前节点的最短路径的节点 2.从起点经过或者不经过 ...
- POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你 ...
- 最短路径问题---Dijkstra算法详解
侵删https://blog.csdn.net/qq_35644234/article/details/60870719 前言 Nobody can go back and start a new b ...
- 数据结构与算法--最短路径之Dijkstra算法
数据结构与算法--最短路径之Dijkstra算法 加权图中,我们很可能关心这样一个问题:从一个顶点到另一个顶点成本最小的路径.比如从成都到北京,途中还有好多城市,如何规划路线,能使总路程最小:或者我们 ...
- 最短路径问题-Dijkstra
概述 与前面说的Floyd算法相比,Dijkstra算法只能求得图中特定顶点到其余所有顶点的最短路径长度,即单源最短路径问题. 算法思路 1.初始化,集合K中加入顶点v,顶点v到其自身的最短距离为0, ...
随机推荐
- python第二天3.1
算数运算符arithmetic operator: + - * / % % : 取余,取模.取的是第一个操作数和第二个操作数除法的余数.整除结果为0. 10 % 3 1 10 ...
- 5、Docker容器网络
使用Linux进行IP层网络管理的指 http://linux-ip.net/html/ # yum install iproute http://linux-ip.net/html/tool ...
- 在微信浏览器中 location.reload() 不刷新解决方案(直接调用方法)
1.问题 在微信浏览器中,需要时刷新当前页面. 正常情况下我们直接使用 location.reload 方法来刷新. 2.解决方法 function realod(){ var {search,hre ...
- ExtJs写本地ArrayStore,ComboBox调用
1.自定义本地ArrayStore var sCurStore = new Ext.data.ArrayStore({ //设备状态store fields: ["ckey", & ...
- js中关于数组处理的一些小技巧
1 reduce方法同时实现map和filter 假设现在有一个数组,然后遍历它的每一项(map的功能)然后筛选出其中的一部分(filter的功能).如果使用map和filter的话,我们需要遍历这个 ...
- js ++i和i++的区别
++i和i++的定义: 1. 如果用前缀运算符对一个变量增1(减1),则在将该变量增1(减1)后,用新值在表达式中进行其他的运算. 2. 如果用后缀运算符对一个变量增1(减1),则用该变量的原 ...
- Python入门(二)列表、字典、字符串、元组、集合
列表list什么是列表:Python内置的一种数据类型是列表,list是一种有序的集合,可以随时添加和删除其中的元素 创建List列表的方法 L = ['杨俊辰',‘啦啦啦’,'Tom'] empty ...
- PCA和PCoA
讲解很详细:http://blog.genesino.com/2016/10/PCA/ PCA分析一般流程: 中心化(centering, 均值中心化,或者中位数中心化),定标(scale,如果数据没 ...
- eclipse运行项目,tomcat报错:Exception in thread :http-bio-8080-exec-4
eclipse运行项目,tomcat报错:Exception in thread :http-bio-8080-exec-4 转自 https://www.cnblogs.com/yby-blogs/ ...
- 深入理解Plasma(四)Plasma Cash
这一系列文章将围绕以太坊的二层扩容框架 Plasma,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等.本篇文章主要介绍在 Plasma 框架下的项目 Plasma Cash. 在上一篇 ...