准备考研,荒废了好多东西,希望做了正确的决定

/*********************************************************
*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)的更多相关文章

  1. 最短路径算法Dijkstra和A*

    在设计基于地图的游戏,特别是isometric斜45度视角游戏时,几乎必须要用到最短路径算法.Dijkstra算法是寻找当前最优路径(距离原点最近),如果遇到更短的路径,则修改路径(边松弛). Ast ...

  2. 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson

    根据DSqiu的blog整理出来 :http://dsqiu.iteye.com/blog/1689163 PS:模板是自己写的,如有错误欢迎指出~ 本文内容框架: §1 Dijkstra算法 §2 ...

  3. 单源最短路径(dijkstra算法)php实现

    做一个医学项目,当中在病例评分时会用到单源最短路径的算法.单源最短路径的dijkstra算法的思路例如以下: 如果存在一条从i到j的最短路径(Vi.....Vk,Vj),Vk是Vj前面的一顶点.那么( ...

  4. 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)

    一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ...

  5. 最短路径之Dijkstra算法和Floyd-Warshall算法

    最短路径算法 最短路径算法通常用在寻找图中任意两个结点之间的最短路径或者是求全局最短路径,像是包括Dijkstra.A*.Bellman-Ford.SPFA(Bellman-Ford的改进版本).Fl ...

  6. 【算法设计与分析基础】25、单起点最短路径的dijkstra算法

    首先看看这换个数据图 邻接矩阵 dijkstra算法的寻找最短路径的核心就是对于这个节点的数据结构的设计 1.节点中保存有已经加入最短路径的集合中到当前节点的最短路径的节点 2.从起点经过或者不经过 ...

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

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

  8. 最短路径问题---Dijkstra算法详解

    侵删https://blog.csdn.net/qq_35644234/article/details/60870719 前言 Nobody can go back and start a new b ...

  9. 数据结构与算法--最短路径之Dijkstra算法

    数据结构与算法--最短路径之Dijkstra算法 加权图中,我们很可能关心这样一个问题:从一个顶点到另一个顶点成本最小的路径.比如从成都到北京,途中还有好多城市,如何规划路线,能使总路程最小:或者我们 ...

  10. 最短路径问题-Dijkstra

    概述 与前面说的Floyd算法相比,Dijkstra算法只能求得图中特定顶点到其余所有顶点的最短路径长度,即单源最短路径问题. 算法思路 1.初始化,集合K中加入顶点v,顶点v到其自身的最短距离为0, ...

随机推荐

  1. thinkphp应用目录不可写,目录无法自动生成! 请手动生成项目目录~

    一是 要把 html下的相关目录设置成 777 chmod -R 777 /var/www/html/..... 二是 要设置 selinux , 或者是 临时 关闭 selinux: setenfo ...

  2. 解决 EDAS:Upload failed: The right margin is 0.535 in on page 1 问题

    参考: IEEETran page margins 解决 EDAS:Upload failed: The right margin is 0.535 in on page 1 问题 在 EDAS 上上 ...

  3. 微信支付之App支付

    项目接入微信支付的准备工作: 注册成为开发者,进行资质认证,这里是需要300元的审核费用的: 在微信商户平台创建应用,提交等待审核(大致需要5-7个工作日): 应用审核通过之后,进入应用,开通微信支付 ...

  4. eclipse报错:Multiple annotations found at this line: - String cannot be resolved to a type解决方法实测

    Multiple annotations found at this line:- String cannot be resolved to a type- The method getContext ...

  5. error LNK1169 找到一个或多个多重定义的符号的解决方法

    问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. A.h是头文件,其中声明了三个变量a1.a2. a3. B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件.B.cpp ...

  6. JAVA程序错误总结

    NoSuchMethodError:main 出错原因:找不到main方法,应该是main方法书写有误. 解决方案:检查public static void main(String [] args){ ...

  7. bzoj 2286: [Sdoi2011]消耗战 虚树+树dp

    2286: [Sdoi2011]消耗战 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 在一 ...

  8. webpack学习笔记 (一)

    一.安装nodejs: 点击打开nodejs官方站点: 点击下图框住的按钮,下周nodejs安装包: 安装下载好的安装包. 安装完毕之后,在cmd中输入node -v查看是否已经安装成功  如果有版本 ...

  9. QTL定位相关

    1.原理 https://www.sohu.com/a/211301179_278730 较为详细

  10. JVM垃圾回收(四)- GC算法:实现(1)

    GC算法:实现 上面我们介绍了GC算法中的核心概念,接下来我们看一下JVM里的具体实现.首先必须了解的一个重要的事实是:对于大部分的JVM来说,两种不同的GC算法是必须的,一个是清理Young Gen ...