題目大意:
有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行,...