題目描述:
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t-shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?
輸入:輸入包括多組資料。每組資料第一行是兩個整數n、m(n<=100,m<=10000),n表示成都的大街上有幾個路口,標號為1的路口是商店所在地,標號為n的路口是賽場所在地,m則表示在成都有幾條路。n=m=0表示輸入結束。接下來m行,每行包括3個整數a,b,c(1<=a,b<=n,1<=c<=1000),表示在路口a與路口b之間有一條路,我們的工作人員需要c分鐘的時間走過這條路。輸入保證至少存在1條商店到賽場的路線。
當輸入為兩個0時,輸入結束。
輸出:對於每組輸入,輸出一行,表示工作人員從商店走到賽場的最短時間。
樣例輸入:
2 11 2 3
3 31 2 5
2 3 5
3 1 2
0 0
樣例輸出:
32floyd:時間複雜度為o(n^3),利用二維矩陣,當兩個節點之間有多餘的一條邊,選擇最小的邊權值存入鄰接矩陣
適合要求詢問多個節點對之間的最短路徑長度問題。
#include #includeusing
namespace
std;
intmain()
while(m--)
for(int k=1;k<=n;k++)}}
printf(
"%d\n
",ans[1][n]);//
迴圈結束後輸出答案
}
return0;
}
dijkstra:時間複雜度為o(n^2),空間複雜度為o(n),適合從某乙個特定的起點出發,到達其他所有節點的最短路徑。
#include #include#include
using
namespace
std;
struct e;
intmain()
for(int i=1;i<=n;i++)
dis[
1]=0;//
得到最近的點為節點1,長度為0
mark[1]=true;//
將節點1加入集合k
int newp=1;//
集合k中新加入的點為節點1
for(int i=1;i//
迴圈n-1次,按照最短路徑遞增的順序確定其他n-1個點的最短路徑長度
for(int j=0;j//
遍歷與該新加入集合k中的節點直接相鄰的邊
int t=edge[newp][j].next;//
該邊的另乙個節點
int c=edge[newp][j].cost;//
邊的長度
if(mark[t]==true)//
如另乙個邊也屬於集合k,跳過
continue
;
if(dis[t]==-1||dis[t]>dis[newp]+c)
dis[t]=dis[newp]+c;//
更新距離資訊
}
int min=123123123;//
最小值初始化
for(int j=1;j<=n;j++)
}mark[newp]=true;//
新加入的點加入集合k
} printf(
"%d\n
",dis[n]);
}return0;
}
類似題目:網路的核(可以練練手)
題目描述
給定乙個無向網路g,網路中共包含n個節點(從1到n編號),m條無向邊,求該網路的核。
網路的核:到網路中其他節點的距離之和最小的節點。且對於不連通的兩點,我們認為它們之間的距離為n,如果有多租借,輸出編號最小的節點。
輸入格式
輸入的第一行是乙個整數t(t<=25),表示輸入的資料組數。,
對於每組測試資料:
第一行有兩個整數n,m(1<=n<=50,0<=m<=n*(n-1)/2),表示網路中有n個點,m條邊。
接下來的m行,每行兩個整數u,v(1<=u,v<=n,u!=v),表示點u和點v之間有一條距離為1的邊。任意兩個點之間最多隻會有一條邊相連。
輸出格式
對於每組測試資料,輸出網路的核。
輸入樣例
3 31 2
1 32 3
4 21 2
2 3輸出樣例
Codeup最短路徑 最短路徑
n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離。第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路,接下來m行兩個整數,表示相連的兩個城市的編號。n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出...
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行,...