9007 最短路徑

2021-09-28 10:09:33 字數 1357 閱讀 9780

time limit: 1 second

memory limit: 256 mb

問題描述

給出乙個有向圖g=(v,e),和乙個源點v0∈v,請寫乙個程式輸出v0和圖g中其他頂點的最短路徑。只要所有的有向環都是正的,我們

就允許圖的邊有負值。頂點的標號從1到n(n為圖g的頂點數)。  

第1行:乙個正數n(2<=n<=80),表示圖g的頂點總數。

第2行:乙個整數,表示源點v0(v0∈v,v0可以是圖g中任意乙個頂點)。

第3至第n+2行,用乙個鄰接矩陣w給出了這個圖。

共包含n-1行,按照頂點編號從小到大的順序,每行輸出源點v0到乙個頂點的最短距離。每行的具體格式參照樣例。

5

10 2 - - 10

- 0 3 - 7

- - 0 4 -

- - - 0 5

- - 6 - 0

(1->2)=2

(1->3)=5

(1->4)=9

(1->5)=9

【題解】

這題的資料超級坑的。。。他在每行的最後乙個數字裡面貌似會有多餘的空格。。。。。、

說下思路。讀取n行的字串,整行讀。

然後找到前n-1個空格。每個空格前面都是數字。然後再單獨處理最後乙個數字。。(有多餘的空格要刪掉).

如果遇到的字元不是-,就在i上面加乙個出度,並記錄這個出度為j。然後記下權值w[i][j]。然後如果為-,則不理它就好。

最後用spfa解決問題就可以啦。

【**】

#include #include #include #include using namespace std;

int n,v0,a[100][100],team[200022];

long long w[100][100],dis[100];

bool exsit[100];

void input_data()

if (flag && i!=j)

ss = ss.erase(0,p+1); //刪掉已經掃瞄過的數字

}while ( ( p = ss.find(" ",0)) != -1) //「坑點」 要刪掉多餘的空格

ss = ss.erase(p,1);

bool flag = false;

for (int k = 0;k <= ss.size()-1;k++) //這是處理每行的最後乙個數字 同上面的迴圈

if (ss[k]!='-')

if (flag)

}}void spfa()}}

}}void output_ans()

int main()

9007 最短路徑

time limit 1 second memory limit 256 mb 問題描述 給出乙個有向圖g v,e 和乙個源點v0 v,請寫乙個程式輸出v0和圖g中其他頂點的最短路徑。只要所有的有向環都是正的,我們 就允許圖的邊有負值。頂點的標號從1到n n為圖g的頂點數 第1行 乙個正數n 2 n...

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,...