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到乙個頂點的最短距離。每行的具體格式參照樣例。
510 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,...