學習筆記最短路徑

2021-10-22 03:47:11 字數 2115 閱讀 6446

n個城市,標號從0到n-1,m條道路,第k條道路(k從0開始)的長度為2^k,求編號為0的城市到其他城市的最短距離

第一行兩個正整數n(2<=n<=100)m(m<=500),表示有n個城市,m條道路

接下來m行兩個整數,表示相連的兩個城市的編號

n-1行,表示0號城市到其他城市的最短路,如果無法到達,輸出-1,數值太大的以mod 100000 的結果輸出。
4 4

1 22 3

1 30 1

8

911

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

110;

const

int m =

510;

string inf;

bool vis[maxn]=;

int n, m, city1, city2;

struct bign };

struct edge };

struct utonum_min

bool

operator

<

(const utonum_min& u)

const};

bign hashtable[m]

;vector g[maxn]

;string d[maxn]

;bign change

(string str)

return a;

}bool

cmp(string str1, string str2)

string num_to_str

(bign a)

return s;

}bign add

(bign a, bign b)

if(carry !=0)

return c;

}bign multi

(bign a,

int b)

while

(carry !=0)

return c;

}void

dijkstra

(int s)}}

}void

init()

bign tr;

tr.d[0]

=1; tr.len =1;

for(

int i =

0; i <

1001

; i++

) inf=

num_to_str

(tr);}

intmain()

dijkstra(0

);for(

int j =

1; j < n; j++)}

cout << endl;

}return0;

}}方法二:

#include

#include

#include

using

namespace std;

const

int maxn =

110;

int father[maxn]

,n,m,dis[maxn]

[maxn]

;int

findfather

(int x)

return x;

}void

init()

for(

int i =

1; i < n; i++)}

intdis_mod

(int a,

int i)

return res;

}int

main()

}}} father[x]

= y;}}

for(

int i =

1; i < n; i++)}

return0;

}

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號城市到其他城市的最短路,如果無法到達,輸出...

最短路徑演算法(Dijkstra)學習筆記

include include using namespace std define vex 5 定義結點的個數 define maxpoint 100 double graph maxpoint 鄰接矩陣 inti,j intmain b maxpoint int d vex p vex 定義陣列...

最短路徑演算法筆記

public int networkdelaytime int times,int n,int k int res 0 for int i 1 i bellman ford每次找到更新後的點,實際上到不了n次就收斂了,若還不收斂說明有負權迴路,不是從源頭開始迭代,鬆弛時不確保父節點已確定,因此做了很...