#include <limits.h> #include <stdio.h> #include <malloc.h> #define MAX 5000 int main() { // 好坑呀,这里一定要MAX int n; int m; scanf("%d", &n); scanf("%d", &m); int g[MAX + 1][MAX + 1]; for (int i = 0; i <=MAX; i++) { for (int j = 0; j <=MAX + 1; j++) { g[i][j] = INT_MAX; } } for (int i = 0; i < m; i++) { int tmp1; int tmp2; int tmp3; scanf("%d", &tmp1); scanf("%d", &tmp2); scanf("%d", &tmp3); g[tmp1][tmp2] = tmp3; g[tmp2][tmp1] = tmp3; } // for (int i = 0; i < n + 1; i++) { // for (int j = 0; j < n + 1; j++) { // printf("g[%d][%d]=%d ", i, j, g[i][j]); // } // printf("\n"); // } int dist[MAX + 1]; for (int i = 0; i <=MAX; i++) { dist[i] = 50000; } // for(int i = 1;i<=n;i++){ // printf("%d ",dist[i]); // } int flag[MAX + 1]; for (int i = 0; i <=MAX; i++) { flag[i] = 0; } for (int i = 1; i <= MAX; i++) { dist[i] = g[1][i]; } dist[1] = 0; flag[1] = 1; for (int i = 2; i <= n; i++) { dist[i] = dist[i] < g[1][i] ? dist[i] : g[1][i]; } for (int i = 2; i <= n; i++) { int tmp =INT_MAX; int t = 1; for (int j = 1; j <= MAX; j++) { if (flag[j] == 0 && dist[j] < tmp) { tmp = dist[j]; t = j; } } if(t!=1){ flag[t] = 1; } for (int j = 1; j <= MAX; j++) { if (flag[j] == 0 && g[t][j] != INT_MAX) { dist[j] = dist[j] < g[t][j] + dist[t] ? dist[j] : g[t][j] + dist[t]; } } } // for(int i = 1;i<=n;i++){ // printf("%d ",dist[i]); // } if(dist[n]!=INT_MAX){ printf("%d ",dist[n]); }else { printf("-1" ); } return 0; }