最短路基礎題,使用bellman-fordios
struct edge e[1e5] 不是鄰接表,只是簡單存圖。spa
題目連接:https://cn.vjudge.net/problem/HDU-2544.net
#include <iostream> #include <algorithm> #include <cstdlib> #include <cstring> #include <string> #include <cmath> #include <vector> #include <queue> using namespace std; typedef long long ll; const int INF = 1e9 + 7; const int Max = 10005; int n, m, sum, cnt; struct edge { int from, to, value; }e[Max]; //vector<edge>e[Max]; void bellman_ford() { int s = 1; int d[105]; for (int i = 1; i <= n; i++) d[i] = INF; d[s] = 0; for (int k = 1; k <= n; k++) { for (int i = 0; i < cnt; i++) { int x = e[i].from; int y = e[i].to; if (d[x] > d[y] + e[i].value) { d[x] = d[y] + e[i].value; } } } sum = d[n]; } int main() { while (cin >> n >> m) { if (n == 0 && m == 0) break; cnt = 0, sum = 0; for (int i = 1; i <= m; i++) { int u, v, w; cin >> u >> v >> w; e[cnt].from = u; e[cnt].to = v; e[cnt].value = w; cnt++; e[cnt].from = v; e[cnt].to = u; e[cnt].value = w; cnt++; } bellman_ford(); cout << sum << endl; } return 0; }