题解 | #【模板】单源最短路2#
【模板】单源最短路2
https://www.nowcoder.com/practice/7c1740c3d4ba4b3486df4847ee6e8fc7
要考虑到案例2的情况。循环要到N
#include<iostream> #include<cstring> using namespace std; const int N = 5100; int n, m; int g[N][N]; int dist[N]; bool st[N]; int dijkstra(){ memset(dist, 0x3f, sizeof dist); dist[1] = 0; for(int i = 0; i < N; i ++){ int t = -1; for(int j = 1; j <= N; j ++){ if(!st[j] && (t == -1 || dist[t] > dist[j])) t = j; } st[t] = true; for(int j = 1; j <= N; j ++){ dist[j] = min(dist[j], g[t][j] + dist[t]); } } if(dist[n] == 0x3f3f3f3f) return -1; return dist[n]; } int main(){ scanf("%d%d", &n, &m); memset(g, 0x3f, sizeof g); while(m --){ int a, b, c; cin >> a >> b >> c; g[a][b] = g[b][a] = c; } int t = dijkstra(); printf("%d\n",t); return 0; }