最短路計數

2021-09-29 07:41:35 字數 1238 閱讀 9188

給出乙個n個頂點m條邊的無向無權圖,頂點編號為1−n。問從頂點1開始,到其他每個點的最短路有幾條。

第一行包含2個正整數n,m,為圖的頂點數與邊數。

接下來m行,每行2個正整數x,y,表示有一條頂點x連向頂點y的邊,請注意可能有自環與重邊

共n行,每行乙個非負整數,第i行輸出從頂點1到頂點i有多少條不同的最短路,由於答案有可能會很大,你只需要輸出ans mod 100003後的結果即可。如果無法到達頂點i則輸出0

開成乙個vector陣列,其實也可以用鄰接錶即鍊錶的形式來儲存資料
dep[maxm]
vis[maxm]
cnt[maxn]:值得品味
可以使用乙個類來表示頂點,類中的資料成員為頂點標識、頂點深度、是否被訪問過;

再使用乙個鍊錶陣列來代替vector類,具體操作方式與vector類相似;

#include

#include

#include

#include

using namespace std;

//廣度優先搜素預設就是最短路徑搜尋

const

int maxn =

1000000+1

, maxm =

2000000+1

, inf =

0x7f7f7f7f

, mod =

100003

;vector<

int>g[maxn]

;//這是乙個vector陣列

int dep[maxn]

; bool vis[maxn]

;//其中的資料都置為0

int cnt[maxn]

;int

main()

queue<

int>q;

//建立佇列

dep[1]

=0; vis[1]

=1; q.

push(1

); cnt[1]

=1;while

(!q.

empty()

)if(dep[t]

== dep[x]+1

)}}for

(int i =

1; i <= n; i++

)return0;

}

最短路計數,次短路計數

acwing 1134.最短路計數 bfs 每個點只出隊一次,且入隊一次 dijkstra 每個點第一次出隊的序列一定滿足拓撲序 bellman ford spfa 出隊的時候都不一定是滿足最小,每個點可能出隊多次,有可能更新前面已經出隊的點,不具備拓撲序 但是要用 spfa 求最短路徑數,也是可以...

最短路計數

乙個無向圖上,沒有自環,所有邊的權值均為1,對於乙個點對 a,b 我們要把所有a與b之間所有最短路上的點的總個數輸出。總數 方程 if dis k map k,j dis j then inc dis k 所有最短路經過的點數之和 先求出floyd,然後 if dis i,k dis k,j dis...

最短路計數

題目描述 給出乙個nn個頂點mm條邊的無向無權圖,頂點編號為1 n1 n。問從頂點11開始,到其他每個點的最短路有幾條。輸入輸出格式 輸入格式 第一行包含22個正整數n,mn,m,為圖的頂點數與邊數。接下來mm行,每行22個正整數x,yx,y,表示有一條頂點xx連向頂點yy的邊,請注意可能有自環與重...