E.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = 101;
  4. int a[MAXN][MAXN];
  5. int book[MAXN];
  6. int dis[MAXN];
  7. int n, m;
  8. int Dijkstra(){
  9. for(int i = 1; i <= n; i++){
  10. dis[i] = a[1][i];
  11. book[i] = 0;
  12. }
  13. book[1] = 1;
  14. for(int i = 1; i < n; i++){
  15. int u = 2, MIN = INT_MAX;
  16. for(int j = 2; j <= n; j++){
  17. if(book[j] == 0 && dis[j] < MIN){
  18. u = j;
  19. MIN = dis[j];
  20. }
  21. }
  22. book[u] = 1;
  23. for(int j = 2; j <= n; j++){
  24. if(a[u][j] < INT_MAX && book[j] == 0 && dis[j] > dis[u] + a[u][j]){
  25. dis[j] = dis[u]+a[u][j];
  26. }
  27. }
  28. }
  29. return dis[n];
  30. }
  31. int main(){
  32. while(cin >> n >> m){
  33. if(n == 0 && m == 0)break;
  34. for(int i = 1; i <= n; i++){
  35. for(int j = 1; j <= n; j++){
  36. if(i != j)
  37. a[i][j] = INT_MAX;
  38. else a[i][j] = 0;
  39. }
  40. }
  41. for(int i = 1; i <= m; i++){
  42. int x, y, z;
  43. cin >> x >> y >> z;
  44. a[x][y] = a[y][x] = z;
  45. }
  46. int sum = Dijkstra();
  47. cout << sum << endl;
  48. }
  49. }