Advertisement
Guest User

Untitled

a guest
Jan 27th, 2015
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4. #include <algorithm>
  5. #include <math.h>
  6.  
  7. using namespace std;
  8.  
  9. class Field
  10. {
  11.  
  12. };
  13.  
  14.  
  15. int Min(int **tab, int N);
  16. void Size(int &N);
  17. void Read(int **tab, vector<int> &PC);
  18. void Write(int **tab, int N);
  19. void PrintScreen(int **tab, int N);
  20. void Prim(int **tab, int **result, int N);
  21. string Binary(int N);
  22.  
  23. int main()
  24. {
  25.     int N = 0;
  26.     Size(N);
  27.  
  28. int ** tab;
  29. tab = new int *[ N ];
  30. for( int i = 0; i < N; i++ )
  31.      tab[ i ] = new int[ N ];
  32.  
  33.     vector<int> PC;
  34.  
  35.     Read(tab, PC);
  36.     PrintScreen(tab, N);
  37.  
  38. int **result;//0 - czy odwiedzony, 1 - poprzednik, 2 -wartość
  39. result = new int *[ 3 ];
  40. for( int i = 0; i < 3; i++ )
  41.     result[ i ] = new int[ N ];
  42.  
  43.  
  44. int ** tab2;
  45. tab2 = new int *[ N ];
  46. for( int i = 0; i < N; i++ )
  47.      tab2[ i ] = new int[ N ];
  48.  
  49. int **result2;//0 - czy odwiedzony, 1 - poprzednik, 2 -wartość
  50. result2 = new int *[ 3 ];
  51. for( int i = 0; i < 3; i++ )
  52.     result2[ i ] = new int[ N ];
  53.  
  54. //kopiowanie
  55. for(int i = 0; i < N; i++)
  56.     for(int j = 0; j < N; j++)
  57.         tab2[i][j] = tab[i][j];
  58.  
  59. int SUMA = 16;
  60. for(int p = 0; p < pow(2, N); p++)
  61. {
  62.  
  63.     string binary = Binary(p);
  64.  
  65.     for(int i = 0; i < N; i++)
  66.         for(int j = 0; j < N; j++)
  67.             {
  68.                 tab[i][j] = tab2[i][j];
  69.                 for(int x = 0; x < PC.size(); x++)
  70.                 if ((binary[i] == 0 || binary[j]==0 ) &&i!=x &&j!=x) {tab[i][j] = 0;}
  71.             }
  72.  
  73.     for(int i = 0; i < N; i++){
  74.         result[0][i] = 0;
  75.         result[1][i] = 0;
  76.         result[2][i] = INT_MAX;
  77.         }
  78.         Prim(tab, result, N);
  79.         unsigned int suma = 0;
  80.         for(int i = 0; i < N; i++){
  81.             if(result[2][i] != INT_MAX) suma += result[2][i];
  82.         }
  83.  
  84.  
  85.         if(suma<SUMA)
  86.         {
  87.             cout<<p<<" "<<binary<<" Suma: "<<suma<<" "<< SUMA<<endl<<endl;
  88.  
  89.             Write(result, N);
  90.         }
  91.         SUMA = suma;
  92. }
  93.  
  94. Write(result, N);
  95.  
  96. //zwalnianie pamiêci
  97. for( int i = 0; i < N; i++ )
  98.      delete[] tab[ i ];
  99. delete[]tab;
  100.  
  101. for( int i = 0; i < 3; i++ )
  102.      delete[] result[ i ];
  103. delete[]result;
  104.  
  105. for( int i = 0; i < N; i++ )
  106.      delete[] tab2[ i ];
  107. delete[]tab2;
  108.  
  109. for( int i = 0; i < 3; i++ )
  110.      delete[] result2[ i ];
  111. delete[]result2;
  112.  
  113.     return 0;
  114. }
  115.  
  116.  
  117.  
  118. void Size(int &N){
  119.      fstream file;
  120.     file.open( "MC_Deby_XII_in.txt", std::ios::in | std::ios::out);
  121.     if( file.good() )
  122.     {
  123.         file>>N;
  124.         file.close();
  125.     }
  126.     else cout<<"Nie udalo sie otworzyc pliku\n";
  127.  
  128. }
  129. void Read(int **tab, vector<int> &PC){
  130.   fstream file;
  131.     file.open( "MC_Deby_XII_in.txt", std::ios::in | std::ios::out);
  132.    if( file.good() )
  133.     {
  134.         int N;
  135.         file>>N;
  136.         int pc;
  137.         file>>pc;
  138.         for(int i = 0; i < pc; i++)
  139.         {
  140.             int h;
  141.             file>>h;
  142.             PC.push_back(h);
  143.         }
  144.  
  145.         for(int i = 0; i < N; i++)
  146.         {
  147.             for(int j = 0; j < N; j++)
  148.             {
  149.                 int h;
  150.                 file>>h;
  151.                 if(h != 300) tab[i][j] = h;
  152.                 else tab[i][j] = 0;
  153.                 if (i == j) tab[i][j] = 0; //pętle
  154.             }
  155.         }
  156.         file.close();
  157.     }
  158.     else cout<<"Nie udalo sie otworzyc pliku\n";
  159. }
  160.  
  161.  
  162. void Write(int **result, int N){
  163.   fstream file;
  164.     file.open( "MC_Deby_XII_out.txt", std::ios::trunc | std::ios::in | std::ios::out);
  165.    if( file.good() )
  166.     {
  167.          cout<<N-1<<endl;
  168.          file<<N-1<<endl;
  169.          for(int i = 1; i < N; i++){
  170.             cout<<i+1<<" "<<result[1][i]+1<<endl;
  171.             file<<i+1<<" "<<result[1][i]+1<<endl;
  172.         }
  173.     }
  174.     else cout<<"Nie udalo sie otworzyc pliku\n";
  175. }
  176. void PrintScreen(int **tab, int N)
  177. {
  178.     for(int i = 0; i < N; i ++)
  179.     {
  180.         for(int j = 0; j < N; j ++)
  181.         cout<<tab[i][j]<<"  ";
  182.         cout<<endl;
  183.     }
  184. }
  185.  
  186.  
  187. int Min(int **tab, int N)
  188. {
  189.     int tmp = INT_MAX;
  190.     int index = 0;
  191.     for(int i = 0; i < N; i++)
  192.     {
  193.         if(tmp >= tab[2][i] && tab[0][i]==0) {
  194.             tmp = tab[2][i];
  195.             index = i;
  196.         }
  197.     }
  198.     return index;
  199. }
  200.  
  201.  
  202. string Binary(int N){
  203.     string binary;
  204.     while(N > 0)
  205.     {
  206.         int tmp = N%2;
  207.         if(tmp==1) binary+='1';
  208.             else binary+='0';
  209.         N /= 2;
  210.     }
  211.     return binary;
  212. }
  213.  
  214.  
  215. void Prim(int **tab, int **result, int N)
  216. {
  217.     int tmp = 0;
  218.     for(int i = 0; i < N; i++)
  219.     {
  220.          for(int j = 0; j < N; j++){
  221.             if (tab[tmp][j]!=0 && result[0][j]==0 && tab[tmp][j]<result[2][j]){
  222.                 result[1][j] = tmp;
  223.                 result[2][j] = tab[tmp][j];
  224.             }
  225.          }
  226.         result[0][tmp] = 1;
  227.         tmp = Min(result, N);
  228.     }
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement