hdu3790最短路径问题 (Dijkstra算法)
最短路径问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 32544 Accepted Submission(s): 9565Problem 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 Input3 2
1 2 5 6
2 3 4 5
1 3
0 0Sample Output9 11
解题步骤:
注意:map[a][b],cost[a][b]分别表示ab的路径长度与花费
- 初始化操作:初始化map与cost,注意如果a=b时候为顶点到自身,因此初始化为0,其他为INF方便后面求解
- 输入操作:在输入的时候不仅存储map与cost也要选出a、b之间路径最短与花费最低的值,因为可以输入数据有a、b有多条路径直接相连接。
- 进入Dijkstra方法内变量与数组的定义:定义要用到的访问数组vis[]、存两点直接最短路径的数组d[]、存两点之间最小花费的数组c[]、要用到的常量Min做比较操作。
- 初始化最短路径数组d[]、存两点之间最小花费的数组c[],遍历map与cost求start起始点到end终止点的值,初始化完成后标记第一个start顶点已经访问过。
- 第一次遍历n个顶点,如果end终点
package com.test;import java.util.Scanner;public class Main {static int maxn = 1007;static int INF = 65535;static int start, e;static int n, m;static int[][] map = new int[maxn][maxn];static int[][] cost = new int[maxn][maxn];public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {n = sc.nextInt();m = sc.nextInt();for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {map[i][j] = i == j ? 0 : INF;cost[i][j] = i == j ? 0 : INF;}}int a, b, c, d;for (int i = 1; i <= m; i++) {a = sc.nextInt();b = sc.nextInt();c = sc.nextInt();d = sc.nextInt();if (map[a][b] > c) {map[a][b] = map[b][a] = c;cost[a][b] = cost[b][a] = d;} else if (map[a][b] == c) {if (cost[a][b] > d)cost[a][b] = cost[b][a] = d;}}start=sc.nextInt();e=sc.nextInt();Dijkstra();}}private static void Dijkstra() {int v = 0,Min;int[] vis = new int[maxn];int[] d = new int[maxn];int[] c = new int[maxn];for(int i = 1;i <= n;i++) {d[i] = map[start][i];c[i] = cost[start][i];}vis[start]=1;//标记访问过for(int i=1;i<=n;i++){
// if(vis[e]==1){//终点已经遍历了直接跳出循环
// break;
// }Min=INF;for(int j=1;j<=n;j++){//如果该顶点没有访问过并且if(vis[j]==0&&d[j]<Min){v=j;Min=d[j];}}vis[v]=1;//标记访问for(int j=1;j<=n;j++){//map[v][j]表示v到j的路径长度if(vis[j]==0&&map[v][j]<INF){if(d[j]>d[v]+map[v][j]){d[j]=d[v]+map[v][j];c[j]=c[v]+cost[v][j];}else if(d[j]==d[v]+map[v][j]){if(c[j]>c[v]+cost[v][j]){c[j]=c[v]+cost[v][j];}}}}}System.out.println(d[e]+" "+c[e]);}
}
hdu3790最短路径问题 (Dijkstra算法)相关推荐
- 最短路径的Dijkstra算法(邻接表)
原文:http://blog.csdn.net/axiqia/article/details/50984464 描述 以邻接表作为存储结构实现,求解从给定源点到给定结束点的最短路径. 输入 从1开始表 ...
- 图的单源最短路径:Dijkstra算法实现
本文介绍的是图的非负权值的单源最短路径问题.问题的提出是,对于有权图D,t提供源点v,要找到从v到其他所有点的最短路径,即单源最短路径问题,在本文中,解决这一问题,是普遍比较熟悉的Dijkstra算法 ...
- 数据结构——最短路径之Dijkstra算法(与最小生成树的prime算法很像,建议一起看)
最短路径之Dijkstra算法 (一)Dijkstra算法 单源最短路径:就是从某一个顶点出发,到图中任意顶点之间的最短路径: [算法概述]:Dijkstra算法适用于解决单源最短路径的问题.即:从源 ...
- dijkstra算法PHP,单源最短路径(dijkstra算法)php实现
做一个医学项目,其中在病例评分时会用到单源最短路径的算法.单源最短路径的dijkstra算法的思路如下: 如果存在一条从i到j的最短路径(Vi.....Vk,Vj),Vk是Vj前面的一顶点.那么(Vi ...
- 最短路径之Dijkstra算法
今天看了最短路径之Dijkstra算法,对这算法,写上自己的心得和感悟! 1.Dijkstra算法,(迪杰斯特拉)--单源最短路径 求的是一个源点到其他顶点的最短路径 算法描述 1).算法思想 设G= ...
- 最短路径问题——Dijkstra算法详解(单源最短路径)
单源最短路径 单源最短路径,是指从图中任一点出发到其他各点之间的最短路径. Dijkstra算法介绍 Dijkstra算法又称迪杰特斯拉算法,dijkstra算法的核心思想是将全部结点所在集合V分成两 ...
- 最短路径(Dijkstra算法),一文必看懂最短路径的方法
最短路径问题(Dijkstra算法) 从图中的某一个顶点出发到达另一个顶点的所经过的边的权重和最小的一条路径,称为最短路径. Dijkstra算法适用于求一个节点到其他节点的最短路径,主要特点是通过广 ...
- dijkstra 算法_最短路径问题Dijkstra算法详解
1.Dijkstra算法介绍 · 算法起源: · Djkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家E ...
- C语言基本数据结构之三(图的广度及深度遍历,求单源最短路径的Dijkstra算法)
上一篇主要讲了二叉树的先序,中序,后序遍历算法以及深度和节点的算法,这篇就讲一讲图的基本算法. 一.图的基本概念 1.1有向图G1: 有向图G是由两个集合V(G)和E(G)组成的,其中:V(G)是顶点 ...
- 数据结构最短路径例题_编程小白暑期进阶笔记45-C语言数据结构与算法最短路径和dijkstra算法...
最短路径 算法特点: 迪科斯彻算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树.该算法常用于路由算法或者作为其他图算法的一个子模块. 算法思路: Dijks ...
最新文章
- lduan server 2012证书服务管理 (十八)
- python结果输出到文件-python print输出到文件
- 有三AI发布360页11万字深度学习CV算法工程师成长指导手册,可下载收藏打印,未完待续...
- 404错误,500错误页面的代表意思
- 2019蓝桥杯省赛---java---B---6(特别数的和)
- Spring Cloud Feign 熔断器支持
- vm 和 容器对比_您将VM放在我的容器中
- CentOS 7.2 rpm 安装 Mysql 5.7
- Troubleshooting:重新安装Vertica建库后无法启动
- SpringBoot修改内置tomcat版本
- lpop 原子_全国中考化学易错知识点——微粒构成的物质分子原子离子
- 基于华为eNSP的企业网络规划
- 银行不良资产收益权转让 模式大起底
- 如何使用 Yahoo! Finance stock API 获取股票数据
- html实现学生成绩等级划分,【小学生成绩等级】_小学生成绩等级评价制度
- 【Modbus 】Modbus 协议
- 在 vi 编辑器中的命令模式下,删除当前光标处的字符使用 __ 命 令。
- 百分点科技“中国国新数据中台”案例入选爱分析国央企数字化报告
- discuz论坛配置
- 酷狗软件测试自学,酷狗音乐检测网络的简单教程
热门文章
- iOS中NSLog的优化使用
- iOS中的XML解析
- python读单行文本求平均值_利用Python读取json数据并求数据平均值
- 边缘检测后去除噪点_修图前vs修图后,原来那些网红“照骗”都是这样修出来的!...
- java 偏向锁 怎么用_Java锁升级、偏向锁、轻量级锁
- layui 传递前端请求_layui弹出层如何传值?
- css3弧形跑道效果_Css 实现漂亮弧形
- c语言入门经典18个程序
- mysql安装被打断_MySQL安装未响应解决方法
- leetcode 3 --- 无重复字符的最长子串