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.pswp.cn/news/273721.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273721.shtml
英文地址,請注明出處:http://en.pswp.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…