Advertisement
midnight_sun

Untitled

Nov 11th, 2023 (edited)
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.87 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. //0-O -1번 거점, 1-A -2번 거점, 2-B -3번 거점, 3-C -4번 거점, 4-D -5번 거점, 5-E -6번 거점, 6-F -7번 거점, 7-G -8번 거점
  4. int path[8][8] = {};
  5. bool visited[8] = {};
  6. vector<int> v[8] = {};
  7. void set_distance() {//단위 처리, 소수점 처리하기 귀찮으니 *10으로 처리해줌
  8.     path[1][0] = path[0][1] = 42;
  9.     path[2][0] = path[0][2] = 38;
  10.     path[3][0] = path[0][3] = 37;
  11.     path[4][0] = path[0][4] = 16;
  12.     path[5][0] = path[0][5] = 25;
  13.     path[6][0] = path[0][6] = 36;
  14.     path[7][0] = path[0][7] = 44;
  15.  
  16.     path[1][2] = path[2][1] = 42;
  17.     path[1][3] = path[3][1] = 50;
  18.     path[1][4] = path[4][1] = 47;
  19.     path[1][5] = path[5][1] = 57;
  20.     path[1][6] = path[6][1] = 53;
  21.     path[1][7] = path[7][1] = 34;
  22.  
  23.     path[2][3] = path[3][2] = 45;
  24.     path[2][4] = path[4][2] = 48;
  25.     path[2][5] = path[5][2] = 55;
  26.     path[2][6] = path[6][2] = 70;
  27.     path[2][7] = path[7][2] = 67;
  28.    
  29.     path[3][4] = path[4][3] = 32;
  30.     path[3][5] = path[5][3] = 53;
  31.     path[3][6] = path[6][3] = 66;
  32.     path[3][7] = path[7][3] = 70;
  33.  
  34.     path[4][5] = path[5][4] = 23;
  35.     path[4][6] = path[6][4] = 45;
  36.     path[4][7] = path[7][4] = 59;
  37.  
  38.     path[5][6] = path[6][5] = 29;
  39.     path[5][7] = path[7][5] = 45;
  40.  
  41.     path[6][7] = path[7][6] = 25;
  42. }
  43. vector<int> tem_path[7] = {};
  44. int tem = 1e9;
  45. void find_line(int idx,int cnt,int sum,int goal) {
  46.     //cout << idx << " " << "* ";
  47.     if (goal == v[cnt].size()) {
  48.         if (visited[0]) {
  49.             //cout << tem << " " << sum << "**\n";
  50.             if (tem > sum) {
  51.                 tem = sum;
  52.                 while (!tem_path[cnt].empty()) tem_path[cnt].pop_back();
  53.                 for (int i : v[cnt]) tem_path[cnt].push_back(i);
  54.             }
  55.         }
  56.         return;
  57.     }
  58.     for (int i = 0; i <= 7; i++) {
  59.         if (!visited[i]) {
  60.             v[cnt].push_back(i);
  61.             visited[i] = 1;
  62.             find_line(i, cnt, sum + path[idx][i], goal);
  63.             v[cnt].pop_back();
  64.             visited[i] = 0;
  65.         }
  66.     }
  67. }
  68. void reset(int g) {
  69.         while (!v[g].empty()) v[g].pop_back();
  70.         while (!tem_path[g].empty()) tem_path[g].pop_back();
  71.         tem = 1e9;
  72.         for (int i = 0; i <= 7; i++) visited[i] = 0;
  73. }
  74. int main() {
  75.     set_distance();
  76.     for (int i = 1; i <= 1; i++) {//버스 대수
  77.         for (int g = 1; g <= 1; g++) {//버스 라인 배정
  78.             int final = 1e9;
  79.             vector<int> final_path[8] = {};
  80.             for (int z = 1; z <= 7; z++) {//버스 시작 라인
  81.                 reset(g);//라인 초기화
  82.                
  83.                 if (!visited[z]) {
  84.                     v[g].push_back(z);
  85.                     visited[z] = 1;
  86.                     find_line(z, g, 0, 7 / i + 1);//현재 위치, 버스 라인 인덱스, 거리 총합, 목표
  87.                     visited[z] = 0;
  88.                     v[g].pop_back();
  89.                 }
  90.                 //if (final > tem) {
  91.                 //  final = tem;
  92.                 //  for (int q : tem_path[g]) final_path[g].push_back(q);
  93.                 //}
  94.  
  95.                 cout <<z<<" "<< tem << "\n";
  96.                 for (int q : tem_path[g]) cout << q << " ";
  97.                 cout << "\n";
  98.             }
  99.             //cout << "cost : " << final << "\npath -> ";
  100.             //for (int z : final_path[g]) cout << z << " ";
  101.             //cout << "\n";
  102.         }
  103.     }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement