Advertisement
Guest User

taxiuri

a guest
Dec 6th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("taxiuri.in");
  6. ofstream fout("taxiuri.out");
  7.  
  8. const int NMAX = 301;
  9. const int oo = (1<<30);
  10.  
  11. int n, m, q;
  12.  
  13. vector < vector < int > > mat(NMAX, vector< int >(NMAX));
  14.  
  15. void Read()
  16. {
  17.     fin >> n >> m;
  18.     for(int i = 1; i <= m; i++)
  19.     {
  20.         int x, y, t;
  21.         fin >> x >> y >> t;
  22.         mat[x][y] = mat[y][x] = t;
  23.     }
  24. }
  25.  
  26. int st[NMAX];
  27.  
  28. void init(int k)
  29. {
  30.     st[k] = 0;
  31. }
  32.  
  33. int succesor(int k)
  34. {
  35.     if(st[k] < n)
  36.     {
  37.         st[k]++;
  38.         return 1;
  39.     }
  40.     else
  41.         return 0;
  42. }
  43.  
  44. bool valid(int k)
  45. {
  46.     if(k > 1)
  47.     {
  48.         if(mat[st[k]][st[k-1]] == 0)
  49.             return 0;
  50.         for(int i=1; i<k; i++)
  51.             if(st[k] == st[i])
  52.                 return 0;
  53.         return 1;
  54.     }
  55.     return 0;
  56. }
  57.  
  58. int solutie(int k, int y)
  59. {
  60.     return st[k] == y;
  61. }
  62.  
  63. void tipar(int k, int v[], int &minn, int &p)
  64. {
  65.     int s = 0;
  66.     for(int i=1; i<=k; i++)
  67.         s += mat[st[i]][st[i-1]];
  68.     if(s < minn)
  69.     {
  70.         minn = s;
  71.         for(int i=1; i<=k; i++)
  72.             v[i] = st[i];
  73.         p = k;
  74.     }
  75. }
  76.  
  77. void bkt(int k, int y, int v[], int &minn, int &p)
  78. {
  79.     init(k);
  80.     while(succesor(k))
  81.         if(valid(k))
  82.             if(solutie(k,y))
  83.                 tipar(k,v, minn, p);
  84.             else
  85.                 bkt(k+1,y, v, minn, p);
  86. }
  87.  
  88. void Write()
  89. {
  90.     for(int i=1; i<=n; i++)
  91.     {
  92.         for(int j=1; j<=n; j++)
  93.             cout<<mat[i][j]<<" ";
  94.         cout<<endl;
  95.     }
  96. }
  97.  
  98. int main()
  99. {
  100.     clock_t tStart = clock();
  101.     Read();
  102.     int v[100] = {0};
  103.     fin>>q;
  104.     for(int i=1; i<=q; i++)
  105.     {
  106.         int p;
  107.         int minn = oo;
  108.         int x=5, y=2;
  109.         fin >> x >> y;
  110.         st[1] = x;
  111.         for(int j=1; j<=p; j++)
  112.             v[i] = 0;
  113.         bkt(2, y ,v ,minn, p);
  114.         for(int j=1; j<=p; j++)
  115.             fout << v[j] << " ";
  116.         fout<<endl;
  117.     }
  118.  
  119.     cout<<(float)(clock()-tStart)/CLOCKS_PER_SEC;
  120.     return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement