gha890826

最短路徑-2(未完成)

Dec 27th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. // ConsoleApplication11.cpp : 定義主控台應用程式的進入點。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <vector>
  7. #include <iomanip>
  8. #define infi 99999
  9. #define vec_num 7
  10. using namespace std;
  11.  
  12. class Map
  13. {
  14. public:
  15.     int ans[vec_num];
  16.    
  17.     int matrix[vec_num][vec_num];
  18.     int* Shortest_Path();
  19.     void print_ans();
  20.     vector<vector<int>> input;
  21.     vector<int> s = { 1 };
  22. };
  23.  
  24. void Map::print_ans()
  25. {
  26.     cout << "ans:";
  27.     for (int i = 0; i < vec_num; i++)
  28.     {
  29.         cout << ans[i] << " ";
  30.     }
  31.     cout << endl;
  32. }
  33.  
  34. int* Map::Shortest_Path()
  35. {
  36.     bool visit[vec_num] = { 0 };
  37.     for (int i = 0; i < input.size(); i++)
  38.     {
  39.         matrix[input[i][0] - 1][input[i][1] - 1] = input[i][2];
  40.     }
  41.     for (int i = 0; i < vec_num; i++)
  42.     {
  43.         for (int j = 0; j < vec_num; j++)
  44.         {
  45.             if (i != j&&matrix[i][j]==0)
  46.                 matrix[i][j] = infi;
  47.             if (i == j)
  48.             {
  49.                 matrix[i][j] = 0;
  50.             }
  51.             if (matrix[i][j] == infi)
  52.             {
  53.                 cout << "X ";
  54.                 continue;
  55.             }
  56.             cout << matrix[i][j] << ' ';
  57.         }
  58.         cout << endl;
  59.     }
  60.  
  61.     for (int i = 0; i < vec_num; i++)
  62.     {
  63.         ans[i] = matrix[0][i];
  64.     }
  65.     visit[0] = 1;
  66.  
  67.     int nextpos;
  68.     for (int i = 0; i < vec_num; i++)
  69.     {
  70.         print_ans();
  71.         if (visit[i] == 0)
  72.         {
  73.             int min=infi;
  74.             for (int j = 0; j < vec_num; j++)
  75.             {
  76.                 if (min>ans[j] && ans[j] != 0)
  77.                 {
  78.                     min = ans[j];
  79.                     nextpos = j;
  80.                 }
  81.             }
  82.             cout << "***min " << min << endl;
  83.  
  84.             for (int j = 0; j < vec_num; j++)
  85.             {
  86.                 cout<<'*'<<min + matrix[i][j] << endl;
  87.                 if (min + matrix[i][j] < ans[j])
  88.                 {
  89.                     cout << "***visit " << j+1 << endl;
  90.                     s.push_back(j+1);
  91.                     visit[j] = 1;
  92.                     ans[j] = min + matrix[i][j];
  93.                 }
  94.             }
  95.         }
  96.         cout << endl;
  97.     }
  98.     print_ans();
  99.     return ans;
  100. }
  101.  
  102. int main()
  103. {
  104.     Map mp1;
  105.     mp1.input = {
  106.         { 1, 2, 4 },
  107.         { 1, 3, 6 },
  108.         { 1, 4, 6 },
  109.         { 2, 3, 1 },
  110.         { 2, 5, 7 },
  111.         { 3, 5, 6 },
  112.         { 5, 3, 6 },
  113.         { 3, 6, 4 },
  114.         { 4, 3, 2 },
  115.         { 4, 6, 5 },
  116.         { 5, 7, 6 },
  117.         { 6, 5, 1 },
  118.         { 6, 7, 8 } };
  119.     mp1.Shortest_Path();
  120.     return 0;
  121. }
Add Comment
Please, Sign In to add comment