Advertisement
Foqrul

TSP

Apr 25th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. #include<iostream>
  2. #define SIZEN 101
  3. #define SIZENC 11
  4. using namespace std;
  5. int nc, sx, sy, dx, dy, cx[SIZENC], cy[SIZENC],minimum,flag[SIZENC],Case=1;
  6. void readCase(){
  7.     scanf("%d%d%d%d%d", &nc, &sx, &sy, &dx, &dy);
  8.     for (int i = 1; i <=nc; i++){
  9.         scanf("%d%d", &cx[i], &cy[i]);
  10.     }
  11.     cx[0] = sx;
  12.     cy[0] = sy;
  13. }
  14. int diff(int u,int v){
  15.     int difference = abs(cx[u] - cx[v]) + abs(cy[u] - cy[v]);
  16.     return difference;
  17. }
  18. void solve(int l, int i, int cost){
  19.     if (l==nc){
  20.         cost += abs(cx[i] - dx) + abs(cy[i] - dy);
  21.         if (cost<minimum)
  22.             minimum = cost;
  23.         return;
  24.     }
  25.     for (int j = 1; j <= nc; j++){
  26.         if (flag[j] == 0){
  27.             flag[j] = 1;
  28.             solve(l + 1, j, cost + diff(i, j));
  29.             flag[j] = 0;
  30.         }
  31.  
  32.        
  33.     }
  34. }
  35. void solveCase(){
  36.     minimum = 1000000;
  37.     for (int i = 1; i <= nc; i++)
  38.         flag[i] = 0;
  39.     solve(0, 0, 0);
  40. }
  41. int main(){
  42.     freopen("fin.txt", "r", stdin);
  43.     freopen("fout.txt", "w", stdout);
  44.     int t;
  45.     scanf("%d", &t);
  46.     while (t--){
  47.         readCase();
  48.         solveCase();
  49.         printf("#%d %d\n", Case++, minimum);
  50.     }
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement