最短路徑問題

2021-09-27 06:49:26 字數 2018 閱讀 5605

題目大意:

有a、b、c、d、e、f六個地方,a到b用時12,b到c用時10,c到d用時3,d到e用時4,e到f用時2,f到a用時16,b到f用時7,c到e用時5,c到f用時6,要求輸入兩個地方,求最短用時,以及路徑。

測試用例舉例

輸入:c e(以空格分開)

輸出:

5

c e

用dijkstra 演算法求解:

**核心參考

#include

#include

#include

using namespace std;

const

int max =6;

int graph[

][max]=,

,,,,

};intscaner

(char input)

//鍵盤輸入abcdef轉為數字012345

return num;

}char

numtochar

(int input)

// 矩陣索引012345轉為abcde

return num;

}void

dijkstra

(const

int numnode,

const

int startnode,

int graph[

][max]

,int

*distance,

int*prenode)

/*節點數, 源節點, 有向圖鄰接矩陣, 源節點到達各個節點的距離, 各個節點的前乙個節點*/

prenode[ startnode ]=-

1;isins[startnode]

= true;

//開始節點放入s集合中

int u = startnode;

for(

int i =

1; i < numnode; i ++

)//這裡迴圈從1開始是因為開始節點已經存放在s中了,還有numnode-1個節點要處理

} isins[nextnode]

= true;

//放入s集合中

u = nextnode;

//下一次尋找的開始節點

/*更新distance*/

for(

int j =

0; j < numnode; j ++)}

}}}int

main()

:";l1: cin.

get(inchar,4)

.get()

;int startnode =

scaner

(inchar[0]

);int endnode =

scaner

(inchar[2]

);if(startnode<

0|| startnode>

5|| endnode<

0|| endnode>5)

dijkstra

(max,startnode,graph, distance, prenode)

; cout <<

"the distance is: "

<

<

cout <<

"the trace is: "

;int index = endnode;

stack<

int> trace;

while

(prenode[index]!=-

1)while

(!trace.

empty()

) cout <<

numtochar

(endnode)

<

return0;

}

結果

參考1.

2.

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...

Codeup最短路徑 最短路徑問題

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t 起點s,...

最短路徑之最短路徑問題

提交 狀態 討論版 命題人 外部匯入 題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點間的直線距離。現在的 任務是找出從一點到另一點之間的最短路徑。輸入共n m 3行,...