最短路計數

2021-07-25 05:03:11 字數 1040 閱讀 8292

乙個無向圖上,沒有自環,所有邊的權值均為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[i,j] then inc(ans[i,j]);

1<=k,i,j<=n,

好像這是最簡單的方法,只能用於資料小的時候。

const

maxn=100;

var a,f:array [1..maxn,1..maxn] of longint;

i,j,n,m,x,y,k,p:longint;

begin

fillchar(a,sizeof(a),$7);

readln(n,m);

for i:=1

to m do

begin

readln(x,y);

a[x,y]:=1;

a[y,x]:=1;

end;

for k:=1

to n do

for i:=1

to n do

for j:=1

to n do

if a[i,j]>a[i,k]+a[k,j] then

a[i,j]:=a[i,k]+a[k,j];

for k:=1

to n do

for i:=1

to n do

for j:=1

to n do

if a[i,j]=a[i,k]+a[k,j] then

inc(f[i,j]);

readln(p);

for i:=1

to p do

begin

readln(x,y);

writeln(f[x,y]+2);

end;

end.

最短路計數,次短路計數

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

最短路計數

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

最短路計數

給出乙個n個頂點m條邊的無向無權圖,頂點編號為1 n。問從頂點1開始,到其他每個點的最短路有幾條。第一行包含2個正整數n,m,為圖的頂點數與邊數。接下來m行,每行2個正整數x,y,表示有一條頂點x連向頂點y的邊,請注意可能有自環與重邊 共n行,每行乙個非負整數,第i行輸出從頂點1到頂點i有多少條不同...