1 条题解
-
0
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 55 + 1, INF = 0x3f3f3f3f, MOD = 1E9 + 7; int n, m, g[N][N], dis[N], st[N]; void dijkstra(int s) { memset(dis, 0x3f, sizeof dis); dis[s] = 0; for (int i = 1; i <= n; i++) { int u = -1; for (int j = 1; j <= n; j++) if (!st[j] && (u == -1 || dis[u] > dis[j])) u = j; st[u] = 1; for (int j = 1; j <= n; j++) dis[j] = min(dis[j], dis[u] + g[u][j]); } } int main(int argc, char* argv[]) { int s, w; cin >> n >> s; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { cin >> w; g[i][j] = (w == 0 ? INF : w); } dijkstra(s); // s->all 单源最短路 for (int i = 1; i <= n; i++) { if (dis[i] == INF) dis[i] = -1; if (i != s) cout << dis[i] << " \n"[i == n]; } return 0; }
- 1
信息
- ID
- 583
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 1
- 标签
- 递交数
- 134
- 已通过
- 91
- 上传者