1. 程式人生 > >華為機試題--高鐵換乘(Floyed演算法)

華為機試題--高鐵換乘(Floyed演算法)

題目:
已知2條地鐵線路,其中A為環線,B為東西向線路,線路都是雙向的。經過的站點名分別如下,兩條線交叉的換乘點用T1、T2表示。編寫程式,任意輸入兩個站點名稱,輸出乘坐地鐵最少需要經過的車站數量(含輸入的起點和終點,換乘站點只計算一次)。
地鐵線A(環線)經過車站:
A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18
地鐵線B(直線)經過車站:
B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15

本題可用Floyed演算法解決。先求出每相鄰兩點的權值(這裡是1,因為相鄰的站就相差1個站),然後窮舉所有點,若存在點k使距離(i,k)+距離(k,j)<距離(i,j),則更新距離(i,j)。
因此這裡用到一個三重迴圈,時間複雜度O(n^3)。

附上程式碼:

#include<stdio.h>
#include<string.h>

const char line1[21][4] = { "A1","A2","A3","A4", "A5","A6", "A7","A8", "A9","T1", "A10","A11", "A12","A13", "T2","A14", "A15","A16", "A17","A18","A1" };
const char line2[17][4] = {"B1","B2","B3","B4", "B5","T1", "B6","B7", "B8","B9", "B10","T2"
, "B11","B12", "B13","B14", "B15"}; const char map[35][4] = { "A1","A2","A3","A4", "A5","A6", "A7","A8", "A9","T1", "A10","A11", "A12","A13", "T2","A14", "A15","A16", "A17","A18","B1","B2","B3","B4", "B5", "B6","B7", "B8","B9", "B10","B11","B12", "B13","B14", "B15" }; int dstn[35][35]; const int inf = 0x3f3f3f3f
; void creat_map() { int i, j, k; for (i = 0; i < 35; i++) { for (j = 0; j < 35; j++) { dstn[i][j] = inf; } } for (k = 0; k < 20; k++) { for (i = 0; strcmp(line1[k], map[i]) != 0; i++); for (j = 0; strcmp(line1[k+1], map[j]) != 0; j++); dstn[i][j] = 1; dstn[j][i] = 1; } for (k = 0; k < 16; k++) { for (i = 0; strcmp(line2[k], map[i]) != 0; i++); for (j = 0; strcmp(line2[k + 1], map[j]) != 0; j++); dstn[i][j] = 1; dstn[j][i] = 1; } for (k = 0; k < 35; k++) { for (i = 0; i < 35; i++) { for (j = 0; j < 35; j++) { if (dstn[i][k] + dstn[k][j] < dstn[i][j]) { dstn[i][j] = dstn[i][k] + dstn[k][j]; } } } } } void main() { int i, j; char a[4], b[4]; creat_map(); while (scanf("%s%s", a, b) != EOF) { for (i = 0; strcmp(a,map[i]) != 0 && i < 35; i++); for (j = 0; strcmp(b,map[j]) != 0 && j < 35; j++); printf("%d\n", dstn[i][j] + 1); } }

相關推薦

試題--換乘Floyed演算法

題目: 已知2條地鐵線路,其中A為環線,B為東西向線路,線路都是雙向的。經過的站點名分別如下,兩條線交叉的換乘點用T1、T2表示。編寫程式,任意輸入兩個站點名稱,輸出乘坐地鐵最少需要經過的車站數量(含

牛客試題刷題筆記

馬上華為提前批開始了,嚇得我趕緊上牛客網刷題,記錄如下: 所有程式碼都在github 1.字串最後一個單詞的長度 一段英文字串中最後一個單詞的長度。 題目比較簡單,做法有很多: 比如, 可以放到stringstream裡面split,拿到最後一個單詞

試題練習

目錄 1、選秀節目打分 2、奇偶排序 3、作業系統任務排程問題。 4. 列印陣列中最大的2個數 5.迴文數字判斷。  6.中級題:亮著電燈的盞數   7.高階題:地鐵換乘 8.判斷if語句括號是否合法 9. 列印 楊輝三角形

試題 最高分是多少

老師想知道從某某同學當中,分數最高的是多少,現在請你程式設計模擬老師的詢問。當然,老師有時候需要更新某位同學的成績. 輸入描述: 輸入包括多組測試資料。 每組輸入第一行是兩個正整數N和M(0 <

試題2016 簡單錯誤記錄

一:簡單錯誤記錄 開發一個簡單錯誤記錄功能小模組,能夠記錄出錯的程式碼所在的檔名稱和行號。 處理: 1.記錄最多8條錯誤記錄,對相同的錯誤記錄(即檔名稱和行號完全匹配)只記錄一條,錯誤計數增加;(檔案所在的目錄不同,檔名和行號相同也要合併) 2.超過16個字元的檔名稱,只

2015 年 9月份試題 2幸運號

// HUAWEI_2.cpp : 定義控制檯應用程式的入口點。 ////找幸運號,petr是否存在,是否是幸運號,詳細描述見華為機試題(2)幸運號描述 #include"stdafx.h" #include<iostream> #include<asse

試題

關聯關係: package huawei.cn; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java

牛客網------試題2

寫出一個程式,接受一個由字母和數字組成的字串,和一個字元,然後輸出輸入字串中含有該字元的個數。不區分大小寫。 輸入描述: 輸入一個有字母和數字以及空格組成的字串,和一個字元。 輸出描述: 輸出輸入字串中含有該字元的個數。 示例1 輸入 ABCDEF A 輸出

試題 查詢

每組輸入第一行是兩個正整數N和M(0<N<=30000,0<M<5000),分表代表學生的數目和操作的數目。 學生ID編號從1編到N。 第二行包含N個整數,代表這N個學生的初始成績,其中第i個數代表ID為i的學生的成績。 接下來有M行。每一行有一個字元C(只取‘Q’或‘U’

某道試題

這道題比較簡單,我就直接放題目跟我的解答吧 對輸入的單詞進行字典序排序輸出: 字典序定義 1. 單詞中字母比較不區分大小寫,兩個單詞先以第一個字母作為排序的基準, 如果第一個字母相同,就用第二個字

試題--二進位制數的每位進行0和1反轉求值

一、問題描述 功能描述:對一個二進位制數的每位進行0和1反轉,求翻轉後的二進位制所對應的十進位制 輸入:110 輸出:1 要求實現方法: public String getNumber(BigInteger data) {     //TODO     return "";

試題——完全數判斷

  這篇博文同上篇博文百度2017年暑期實習生筆試題——單詞接龍同屬2016中興捧月藍劍之路挑戰賽初賽模擬測試題,相比前一題難度偏低,非惡意灌水,僅為保證該系列博文的完整性。   測試用例如下圖:   中興的比賽中官方已經為我們實現了主程式,只需要我們自己實現Perfect

試題[2017.8.23]

題目:給定一個正整數,給出消除重複數字以後最大的整數 輸入描述: 正整數,注意考慮長整數 輸出描述: 消除重複數字以後的最大整數 下面的好像有問題,當輸入是4325432時結果不對 #includ

試題之表示式求值

今天做了華為機試,最後一道題做錯了,回來又重新寫了一下。 表示式求值往年好像有的,但是這次的題加了括號,所以寫起來麻煩了一些。 還有就是在處理+-號的時候做錯了,可能是當時腦袋太蒙了,沒有看出來,160的題只得了61分(不過話說這個1是咋來的?)。 下面附上程式碼吧: #i

試題-判斷二進位制中0的個數【4】

題目描述: 輸入一個10進位制數字,請計算該數字對應二進位制中0的個數,注意左數第一個1之前的所有0都不需要計算。不需要考慮負數的情況。 我之前的部落格講過類似的問題,部落格地址如下: 思

試題——擲骰子游戲

/*問題描述:   在擲骰子游戲中,會根據所擲數字在地圖中前進幾步,前進完成後需要根據當前地圖位置所示的障礙進行相應操作,其中障礙表示:  1) 9:無障礙  2) 1:停擲一輪,即下輪所擲數字無效; 3) 2:後退兩步,如果已經到起點不再後退; 4) 3:獎勵前進一步 

試題--9.數字顛倒

兩種型別:逆序不去開始的0,逆序去掉開頭的0 逆序不去開始的0 題目描述 描述: 輸入一個整數,將這個整數以字串的形式逆序輸出 程式不考慮負數的情況,若數字含有0,則逆序形式也含有0,如輸入為

試題--3.明明的隨機數

題目描述: 明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤1000),對於其中重複的數字,只保留一個,把其餘相同的數去掉,不同的數

試題 好友關係管理

好友關係管理 描述: 現有一個社交網站,其好友推薦策略為:使用者A和使用者B不是好友,當二人的共同好友數量超過好友推薦閾值m時,就向A和B分別推薦為彼此好友。 本題任務為:對設定的m值,給定

試題--迴文數的判定

 一、題目描述: 有這樣一類數字,他們順著看和倒著看是相同的數,例如:121,656,2332等,這樣的數字就稱為:迴文數字。編寫一個函式,判斷某數字是否是迴文數字。 要求實現方法: public String isPalindrome(long num); 二、 演算法分