HDOJ-3790-最短路径问题 解题报告

       一道最短路问题。普通最短路问题的边只有一种权值,而此题的边要考虑两种权值。因为节点n<=1000,所以不能够使用Floyd算法,时间复杂度较高,这里使用Dijkstra算法解决。


       中文描述,题意不再赘述。只是要注意每条边都有距离和花费两种权,当且仅当两条边的距离相等时才比较花费。因为需要考虑两种权,所以算法代码要有相应的改变。另外,要考虑重边的问题,依旧要考虑两种权值。


       下面是解题代码:Dijkstra解法

 

  1 #include <stdio.h>
  2 #define N 1001
  3 #define INF 9999999
  4 
  5 int map[N][N];      /*距离图*/
  6 int cost[N][N];     /*花费图*/
  7 int dis[N];         /*起点到i的距离*/
  8 int cos[N];         /*起点到i的花费*/
  9 int flag[N];        /*标志变量*/
 10 int n, m;
 11 int s, t;
 12 
 13 void Init();    /*初始化*/
 14 
 15 void Read();    /*输入*/
 16 
 17 void Dijkstra();
 18 
 19 int main()
 20 {
 21     while (~scanf("%d %d", &n, &m))
 22     {
 23         if (n == 0 && m == 0)
 24         {
 25             break;
 26         }
 27         Init();
 28         Read();
 29         Dijkstra();
 30         printf("%d %d\n", dis[t], cos[t]);
 31     }
 32     return 0;
 33 }
 34 
 35 void Init()     /*初始化*/
 36 {
 37     int i, j;
 38     for (i=1; i<=n; ++i)
 39     {
 40         for (j=1; j<=n; ++j)
 41         {
 42             map[i][j] = cost[i][j] = INF;
 43         }
 44         dis[i] = cos[i] = INF;
 45         flag[i] = 0;
 46     }
 47     return;
 48 }
 49 
 50 void Read()     /*输入*/
 51 {
 52     int i;
 53     int a, b, c, d;
 54     for (i=0; i<m; ++i)
 55     {
 56         scanf("%d %d %d %d", &a, &b, &c, &d);
 57         if (map[a][b] > c || (map[a][b] == c && cost[a][b] > d))    /*解决重边*/
 58         {
 59             map[a][b] = map[b][a] = c;
 60             cost[a][b] = cost[b][a] = d;
 61         }
 62     }
 63     scanf("%d %d", &s, &t);
 64     return;
 65 }
 66 
 67 void Dijkstra()
 68 {
 69     int i, j, k;
 70     int mind, minc;
 71     dis[s] = cos[s] = 0;
 72     for (i=1; i<=n; ++i)
 73     {
 74         mind = minc = INF;
 75         for (j=1; j<=n; ++j)
 76         {
 77             /*多权值的比较*/
 78             if (flag[j] == 0 && (mind > dis[j] || (mind == dis[j] && minc > cos[j])))
 79             {
 80                 mind = dis[k = j];
 81                 minc = cos[k];
 82             }
 83         }
 84         flag[k] = 1;
 85         for (j=1; j<=n; ++j)
 86         {
 87             if (flag[j] == 0 && dis[j] > dis[k] + map[k][j])
 88             {
 89                 dis[j] = dis[k] + map[k][j];
 90                 cos[j] = cos[k] + cost[k][j];
 91             }
 92             /*当距离相同时考虑花费*/
 93             if (flag[j] == 0 && dis[j] == dis[k] + map[k][j] && cos[j] > cos[k] + cost[k][j])
 94             {
 95                 cos[j] = cos[k] + cost[k][j];
 96             }
 97         }
 98     }
 99     return;
100 }

转载于:https://www.cnblogs.com/JZQT/p/3802445.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用自定命令打开常用软件,小白秒变大神。

不多说&#xff0c;先来个效果&#xff0c;WIINR打开运行&#xff0c;输入qq(小编自定的命令)&#xff0c;就能打开。 实现步骤&#xff1a; 1、找到快捷方式(以腾讯QQ为例) 2、将腾讯QQ快捷方式复制粘贴到C:\Windows,并修改名称 3、测试&#xff0c;winr代开运行&#xff0c;…

问题之JS中传递数值过大或前置有零时

1、JS中传递数值多大数值会变 var number 00161213313254545433 turnToDetail(number); function turnToDetail(queryNumber){ queryNumber ! 00161213313254545433(true) } 应将数值转换为字符串 var number 00161213313254545433 turn…

rpm的用法 详解

Linux rpm 命令参数使用详解&#xff3b;介绍和应用&#xff3d; RPM是RedHat Package Manager&#xff08;RedHat软件包管理工具&#xff09;类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包&#xff08;Binary&#xff09;以及源代码包&#xff08;Source&#x…

Android与Libgdx环境配置

此处所说的是基于windows和android版本的libgdx环境配置。 1. 下载所需软件 JDK 1.7。 下载地址&#xff1a; window x86版本地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html Android SDK。 在android官网上下载最新版…

问题之sqlyou的使用

当数据过大时一定要注意sqlyou每页只能显示1000条数据

问题之mybatis-plus中的TableField、Tableld的区别

Tableld&#xff1a;属性与主键的映射关系。 TableField:列与属性的映射关系。

浅蓝色设计类网站模板

浅蓝色设计类网站模板是一款高端大气的设计css3企业网站模板。 模板地址&#xff1a;http://www.huiyi8.com/sc/8673.html 转载于:https://www.cnblogs.com/xkzy/p/3765371.html

html5中的一些标签学习总结

html5 contenteditable"true" html5内容可编辑属性 html5 hgroup hgroup字面意思是头部的组&#xff0c;可以将其分拆为h和group来理解。在html5中的作用是用于对网页和区块的标题进行组合。&#xff08;网页是一个最大的区块&#xff0c;所以可以认为hgroup是区块的…

总结1:Ajax上传图片至阿里云服务器

1.页面效果以及JS <!-- HTML --> <div style"margin:30px;"><div class"form-horizontal rowt"><div class"control-label col-lg-1">标书分类</div><div class"col-lg-2"><select required&q…

Leetcode::Subsets

Given a set of distinct integers, S, return all possible subsets. 分析&#xff1a;题目就是给一个整数集合&#xff0c;给出所以的子集。 基本思想是递归或者说是迭代的方法。用前面得到的集合来构造 后面的。但是怎样高效、方便的构造集合是关键点。比如&#xff0c;开始…

总结2:上传图片至指定服务器

1.前段页面以及JS <!-- HTML --> <section class"content"><div class"row"><div class"col-xs-12"><div class"box box-success"><div class"row" style"margin-top: 1%;margin-bu…

苹果新的编程语言 Swift 语言进阶(一)--综述

Swift 是苹果开发和提供的供开发IOS 和OS X应用的一门新的语言。Swift语言基于C 和Objective-C语言&#xff0c;除了提供C 和Objective-C语言具有的所有语法功能外&#xff0c;为了编程方便和高效&#xff0c;Swift在语法上作了大量的优化和改进。 Swift采用安全编程模式&#…

总结3:IDEA中使用${pageContext.request.contextPath}填写路径时出错

问题描述&#xff1a; 之前一个项目在eclipse中开发的&#xff0c;其中有使用到 <jsp:include page"${pageContext.request.contextPath}/../head.jsp"/>启动项目成功&#xff0c;访问出错。在换到IDEA中启动项目时提示路径出错&#xff0c;当把路径修改为 …

操作12864(ST7920控制器)

引脚部分查看中文的12864介绍&#xff0c;下面这些可以在ST7920的英文数据手册里查到。 Function Description 部分介绍工作方式、存储器、操作方法。Instructions 部分介绍指令。按照并行或串行的 Timing Diagram 来操作&#xff0c;注意数据何时有效。查看初始化的流程图&…

问题之传递参数名和接收参数名要一致。

前端传递发送的Ajax请求&#xff0c;请求参数为data data: {organizationId:$("#organId").val()},//data.field 后端接受参数 //错误接受参数 RequestMapping(value "") ResponseBody public Object findAll(Integer organId) { return…

总结4:input文本输入框自动提示

1、页面效果 2、引入CSS/JS <link rel"stylesheet" href"css/jquery-ui.min.css"><script src"https://code.jquery.com/jquery-1.12.4.js"></script><script src"https://code.jquery.com/ui/1.12.1/jquery-ui.js&qu…

Map集合遍历

//创建一个map对象并赋值Map<String, String> map new HashMap<String, String>();for (int i 0; i < 10; i) {map.put("Key" i, "Value" i);}//使用keySet便利Set<String> keySet map.keySet();for (String s : keySet) {Syste…

MySql数据同步FEDERATED引擎

概要&#xff1a;FEDERATED存储引擎访问在远程数据库的表中的数据&#xff0c;而不是本地的表。这个特性给某些开发应用带来了便利&#xff0c;你可以直接在本地构建一个federated表来连接远程数据表&#xff0c;配置好了之后本地表的数据可以直接跟远程数据表同步。实际上这个…

SpringBoot 配置多数据源(Sql Server、MySql)

创建SpringBoot项目就不说了。(直接使用IDEA创建就好了) 整个目录结构如图&#xff1a;&#xff08;不用管图中报错&#xff0c;项目是在另一台电脑上写的。报错是没有jar包&#xff0c;因为网络比较慢。&#xff09; 1、主要pom.xml <dependencies><dependency>…

【SQL语句】MySql、SqlServer查询近期记录

#-------------------------MYSQL------------------------- #每小时记录 SELECT HOUR(open_time) hourNum, COUNT(1) hourCount FROM b_entrance_guard_record GROUP BY HOUR(open_time) #近六个月出入记录 SELECT MONTH(n.open_time) monthNum, COUN…