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

/*********************************************************
*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. SpringIOC的概念理解、构造器注入、setter注入、p命名空间注入、IOC容器介绍与比较

    1.IOC概念理解 IOC(Inversion of Control)即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...

  2. Multiple markers at this line - Missing semicolon时的解决方法

    Myeclipse的web项目中的js文件报Multiple markers at this line - Missing semicolon时的解决方法 MyEclipse的web项目中的js文件报 ...

  3. Vue-admin工作整理(十): Vuex-Actions(模拟接口请求实现组件字段更新)

    思路:通过提交一个 mutation,而不是直接变更状态,它可以包括异步操作,通过请求接口,定义一个方法,第一个参数为对象,在里面能够提取到一些东西,比如:commit,这是一个方法,调用这个comm ...

  4. git commit -m 提交的内容换行

    网上说只需要通过单引号来换行,一直没理解,后面终于试出来了.总结一句话就是. . 先输入第一个引号,按Enter即可换行,完成后再补齐后面的引号 // 步骤一: 输入第一行 git commit -m ...

  5. Valotile关键字详解

    在了解valotile关键字之前.我们先来了解其他相关概念. 1.1  java内存模型: 不同的平台,内存模型是不一样的,我们可以把内存模型理解为在特定操作协议下,对特定的内存或高速缓存进行读写访问 ...

  6. CSS实现水平垂直居中的1010种方式

    转载自:CSS实现水平垂直居中的1010种方式 划重点,这是一道面试必考题,很多面试官都喜欢问这个问题,我就被问过好几次了 要实现上图的效果看似很简单,实则暗藏玄机,本文总结了一下CSS实现水平垂直居 ...

  7. HDU 6521 Party

    6521 思路: 线段树玄学剪枝, 俗称吉司机线段树. 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize ...

  8. Axure下拉列表的交互事件 + 自定义元件库

    下拉列表的交互事件: 场景:当点击第一个下拉列表框的江苏时,第二个列表框会显示江苏省的城市:当点击第一个下拉列表框的北京时,第二个列表框会显示北京市的区 操作:把第二个列表框设置为动态面板,设置为两种 ...

  9. Petrozavodsk Winter Camp, Day 8, 2014, Fine Brochures

    1的个数-块的个数+多减的个数+flag 多减的只会在一个循环末尾出现 #include <bits/stdc++.h> using namespace std; #define rep( ...

  10. C语言 九九乘法表

    #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { int i,j,k; ...