Advertisement
Guest User

Untitled

a guest
Feb 19th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. #include <vector>
  4. #include <fstream>
  5. #include <windows.h>
  6. #include <iomanip>
  7.  
  8. const double PI = 3.141592653589793238462643383279502884197;
  9.  
  10. using namespace std;
  11.  
  12. vector<vector<int>> resolve(98);
  13.  int pure=0;
  14.  
  15. vector<bool> reverse(vector<bool>A)
  16. {
  17.     for(int i=0;i<(int)A.size();i++)
  18.     {
  19.         A[i]=(1-A[i]);
  20.     }
  21.     return A;
  22. }
  23. vector<bool> sum_module(vector<bool> A, vector<bool> B)
  24. {
  25.     vector<bool>C(A.size());
  26.  
  27.     for(int i=0;i<(int)C.size();i++)
  28.     {
  29.         bool a,b;
  30.         if(A[i]<=(1-B[i]))a=A[i];
  31.         if(B[i]<=(1-A[i]))b=B[i];
  32.         if(a>=b)C[i]=a;
  33.         else C[i]=b;
  34.     }
  35.     return C;
  36. }
  37. int dis_Hemming(vector<bool> A, vector<bool> B)
  38. {
  39.     int sum=0;
  40.     vector<bool>C(A.size());
  41.  
  42.     for(int i=0;i<(int)C.size();i++)
  43.     {
  44.         bool a,b;
  45.         if(A[i]<=(1-B[i]))a=A[i];
  46.         else a=(1-B[i]);
  47.         if(B[i]<=(1-A[i]))b=B[i];
  48.         else a=(1-A[i]);
  49.         if(a>=b)C[i]=a;
  50.         else C[i]=b;
  51.         sum+=C[i];
  52.     }
  53.     return sum;
  54. }
  55. vector<bool> diff(vector<bool>A,vector<bool>B)
  56. {
  57.     for(int i=0;i<(int)A.size();i++)
  58.     {
  59.         if(A[i]>=(1-B[i]))A[i]=(1-B[i]);
  60.     }
  61.     return A;
  62. }
  63. vector<vector<bool>> transp(vector<vector<bool>> matrix)
  64. {
  65.     vector<vector<bool>> buf;
  66.     buf.resize(matrix[0].size());
  67.     for(int i=0;i<(int)buf.size();i++)
  68.     {
  69.         buf[i].resize(matrix.size());
  70.         for(int j=0;j<(int)buf[i].size();j++)
  71.         {
  72.             buf[i][j]=matrix[j][i];
  73.         }
  74.     }
  75.     return buf;
  76. }
  77. vector<bool> sum(vector<bool> A,vector<bool> B)
  78. {
  79.     for(int i=0;i<(int)A.size();i++)
  80.     {
  81.         if(A[i]<=B[i])A[i]=B[i];
  82.     }
  83.     return A;
  84. }
  85. vector<vector<int>> check(int hl,vector<vector<bool>> A,vector<int>amount)
  86. {
  87.     bool brk=false;
  88.     bool solution=false;
  89.     if(hl>1)
  90.     {
  91.         for(int i=1;i<hl;i++)
  92.         {
  93.             for(int j=0;j<(int)A[i].size();j++)
  94.             {
  95.                 //
  96.                 if(A[i-1][j]==A[i][j]){cout<<" Для подмножества {";
  97.                                                                     for(int h=0;h<(int)amount.size();h++)
  98.                                                                         cout<<amount[h]<<" ";  cout<<"} нет решений "<<endl; brk=true;break;}
  99.                 if(j==A[i].size()-1) A[i]=sum(A[i-1],A[i]);
  100.            
  101.             }
  102.             if(brk)break;
  103.             if(i==hl-1)
  104.             {
  105.                 int sum=0;
  106.                 for(int g=0;g<(int)A[i].size();g++)sum+=(int)A[hl-1][g];
  107.                 if((float)sum/A[i].size()==1)
  108.                 {
  109.  
  110.                 cout<<" Для подмножествa {";
  111.                 for(int h=0;h<(int)amount.size();h++)
  112.                     cout<<amount[h]<<" ";
  113.                 cout<<"} имеется решение "<<endl;
  114.  
  115.                 solution=true;
  116.                 }
  117.                 else {cout<<" Для подмножества {";for(int h=0;h<amount.size();h++)
  118.                     cout<<amount[h]<<" ";  cout<<"} нет решений "<<endl;}
  119.             }
  120.         }
  121.     }
  122.     if(hl==1)
  123.     {
  124.                 int sum=0;
  125.                 for(int g=0;g<(int)A[0].size();g++)sum+=(int)A[hl-1][g];
  126.                 if((float)sum/A[0].size()==1)
  127.                 {
  128.                 cout<<" Для подмножествa {";
  129.                 for(int h=0;h<amount.size();h++)
  130.                     cout<<amount[h]<<" ";
  131.                 cout<<"} имеется решение "<<endl;
  132.                 solution=true;
  133.                 }
  134.                 else {cout<<" Для подмножества {";for(int h=0;h<(int)amount.size();h++)
  135.                     cout<<amount[h]<<" ";  cout<<"} нет решений "<<endl;}
  136.     }
  137.  
  138.     if(solution)
  139.     {
  140.         resolve[pure].resize(amount.size());
  141.         for(int d=0;d<(int)resolve[pure].size();d++)
  142.             resolve[pure][d]=amount[d];
  143.         pure++;
  144.     }
  145.    
  146.     return resolve;
  147. }
  148. int main()
  149. {
  150.     setlocale(0,"");
  151.     ifstream in;
  152.     in.open("matrix.txt");
  153.     vector<vector<bool>> matrix;
  154.     int N,M;
  155.    
  156.  
  157.     if (in)
  158.     {
  159.         {
  160.             in>>N;
  161.             in>>M;
  162.             matrix.resize(N);
  163.             for (int i = 0; i < N; i++)
  164.             {
  165.                 matrix[i].resize(M);
  166.                 for (int j = 0; j < M; j++)
  167.                 {
  168.                     bool a;
  169.                     in >> a;
  170.                     matrix[i][j]=a;
  171.                 }
  172.             }
  173.         }
  174.         in.close();
  175.     }
  176.             for (int i = 0; i < matrix.size(); i++)
  177.                 for (int j = 0; j < matrix[i].size(); j++)
  178.                 {
  179.                     cout<<matrix[i][j]<<" ";
  180.                     if(j==matrix[i].size()-1)cout<<endl;
  181.                 }
  182.     matrix=transp(matrix);
  183.     cout<<endl;
  184.     for (int i = 0; i < matrix.size(); i++)
  185.                 for (int j = 0; j < matrix[i].size(); j++)
  186.                 {
  187.                     cout<<matrix[i][j]<<" ";
  188.                     if(j==matrix[i].size()-1)cout<<endl;
  189.                 }
  190.  
  191.    
  192.     int x, k;
  193.     x= matrix.size();
  194.     k=powf(2,x);
  195.     for (int i=1; i<k; i++)
  196.         {
  197.             vector<vector<bool>> reserv(99);
  198.             vector<int> amount;
  199.             int hl=0;
  200.             for (int j=0; j<x; j++)
  201.             {
  202.                 if (i & (1<<j))
  203.                 {
  204.                     amount.push_back(j);
  205.                     reserv[hl]= matrix[j] ;
  206.                     hl++;
  207.                    
  208.                 }
  209.                  if(j==x-1)check(hl,reserv,amount);
  210.             }                  
  211.     }
  212.                    
  213.  
  214.     cout<<"SOLUTION !!!"<<endl;
  215.         for(int i=0;i<pure;i++)
  216.         {
  217.             cout<<" Подмножество {";
  218.             for(int p=0;p<resolve[i].size();p++)
  219.             {
  220.                     cout<<resolve[i][p]<<" ";
  221.             }
  222.             cout<<"} "<<endl;
  223.         }
  224.    
  225.     system("pause");
  226.     return 0;
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement