MinhNGUYEN2k4

V8sort

Mar 23rd, 2021 (edited)
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. #define fi first
  4. #define se second
  5. #define mp make_pair
  6. #define pb push_back
  7. #define Co_mot_su_that_la return
  8.  
  9. using namespace std;
  10. typedef pair<int,int> ii;
  11. typedef pair<int,ii> iii;
  12. typedef vector<int> vi;
  13. typedef vector<ii> vii;
  14. typedef vector<vi> vvi;
  15. typedef vector<iii> viii;
  16. typedef pair<int, vi> state;
  17.  
  18. const int Minh_dep_trai = 0;
  19. const int N = 8;
  20.  
  21. string s;
  22. int a[N][N];
  23. map<vector<int>,int> dis;
  24. int n;
  25. vector<int> g;
  26.  
  27. void init()
  28. {
  29.     getline(cin,s);
  30.     stringstream ss(s);
  31.     int x;
  32.     while (ss>>x) g.pb(x);
  33.     n = g.size();
  34.     for(int i=0; i<n; i++)
  35.     {
  36.         for(int j=0; j<n; j++) cin >> a[i][j];
  37.     }
  38. }
  39.  
  40. bool isend(const vector<int> &v)
  41. {
  42.     for(int i=0; i<v.size()-1; i++) if (v[i] > v[i+1]) return false;
  43.     return true;
  44. }
  45.  
  46. int getDis(const vector<int> &v)
  47. {
  48.     return (dis.find(v) == dis.end() ? 999999999 : dis[v]);
  49. }
  50.  
  51.  
  52. void dijkstra(void) {
  53.     priority_queue<state,vector<state>,greater<state> > q;
  54.     dis[g]=0;
  55.     q.push(state(0,g));
  56.     while (!q.empty()) {
  57.         int d=q.top().fi;
  58.         vector<int> cur=q.top().se;
  59.         q.pop();
  60.         if (d!=getDis(cur)) continue;
  61.         if (isend(cur)) {
  62.             printf("%d\n",d);
  63.             return;
  64.         }
  65.         for(int i=0; i<n; i++) for(int j=0; j<n; j++) if (i<j) {
  66.             swap(cur[i],cur[j]);
  67.             if (getDis(cur)>d+a[i][j]) {
  68.                 dis[cur]=d+a[i][j];
  69.                 q.push(state(d+a[i][j],cur));
  70.             }
  71.             swap(cur[i],cur[j]);
  72.         }
  73.     }
  74. }
  75.  
  76. signed main(void)
  77. {
  78.   ios_base::sync_with_stdio(false);
  79.   cin.tie(0);cout.tie(0);
  80.   freopen("tes.inp","r",stdin);
  81.     init();
  82.     dijkstra();
  83.   Co_mot_su_that_la Minh_dep_trai;
  84. }
  85.  
Add Comment
Please, Sign In to add comment