Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication11.cpp : 定義主控台應用程式的進入點。
- //
- #include "stdafx.h"
- #include <iostream>
- #include <vector>
- #include <iomanip>
- #define infi 99999
- #define vec_num 7
- using namespace std;
- class Map
- {
- public:
- int ans[vec_num];
- int matrix[vec_num][vec_num];
- int* Shortest_Path();
- void print_ans();
- vector<vector<int>> input;
- vector<int> s = { 1 };
- };
- void Map::print_ans()
- {
- cout << "ans:";
- for (int i = 0; i < vec_num; i++)
- {
- cout << ans[i] << " ";
- }
- cout << endl;
- }
- int* Map::Shortest_Path()
- {
- bool visit[vec_num] = { 0 };
- for (int i = 0; i < input.size(); i++)
- {
- matrix[input[i][0] - 1][input[i][1] - 1] = input[i][2];
- }
- for (int i = 0; i < vec_num; i++)
- {
- for (int j = 0; j < vec_num; j++)
- {
- if (i != j&&matrix[i][j]==0)
- matrix[i][j] = infi;
- if (i == j)
- {
- matrix[i][j] = 0;
- }
- if (matrix[i][j] == infi)
- {
- cout << "X ";
- continue;
- }
- cout << matrix[i][j] << ' ';
- }
- cout << endl;
- }
- for (int i = 0; i < vec_num; i++)
- {
- ans[i] = matrix[0][i];
- }
- visit[0] = 1;
- int nextpos;
- for (int i = 0; i < vec_num; i++)
- {
- print_ans();
- if (visit[i] == 0)
- {
- int min=infi;
- for (int j = 0; j < vec_num; j++)
- {
- if (min>ans[j] && ans[j] != 0)
- {
- min = ans[j];
- nextpos = j;
- }
- }
- cout << "***min " << min << endl;
- for (int j = 0; j < vec_num; j++)
- {
- cout<<'*'<<min + matrix[i][j] << endl;
- if (min + matrix[i][j] < ans[j])
- {
- cout << "***visit " << j+1 << endl;
- s.push_back(j+1);
- visit[j] = 1;
- ans[j] = min + matrix[i][j];
- }
- }
- }
- cout << endl;
- }
- print_ans();
- return ans;
- }
- int main()
- {
- Map mp1;
- mp1.input = {
- { 1, 2, 4 },
- { 1, 3, 6 },
- { 1, 4, 6 },
- { 2, 3, 1 },
- { 2, 5, 7 },
- { 3, 5, 6 },
- { 5, 3, 6 },
- { 3, 6, 4 },
- { 4, 3, 2 },
- { 4, 6, 5 },
- { 5, 7, 6 },
- { 6, 5, 1 },
- { 6, 7, 8 } };
- mp1.Shortest_Path();
- return 0;
- }
Add Comment
Please, Sign In to add comment