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次就收斂了,若還不收斂說明有負權迴路,不是從源頭開始迭代,鬆弛時不確保父節點已確定,因此做了很...