SHARE
TWEET

Untitled

a guest Sep 14th, 2017 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // backtrack.cpp : Defines the entry point for the console application.
  2. // Pro 14/1 37
  3. // Pro 14/2 19
  4. // Pro 15/1 254
  5. // Pro 15/2 140
  6. // Pro 15/15 129
  7.  
  8. //#include "stdafx.h"
  9. #include <omp.h>
  10. #include <iostream>
  11. #include "time.h"
  12. #include <cmath>
  13. using namespace std;
  14.  
  15. const int N = 16;
  16.  
  17. bool PripustnePole(int souradniceX, int souradniceY,int sach[N])
  18. {
  19.     for (int i=0; i<souradniceX; i++)
  20.     {
  21.         if(sach[souradniceX-i-1] == souradniceY){return false;}
  22.         if(souradniceY-i-1>=0 && sach[souradniceX-i-1]==souradniceY-i-1){return false;}
  23.         if(souradniceY+i+1 <N && sach[souradniceX-i-1]==souradniceY+i+1){return false;}
  24.     }
  25.     return true;
  26. }
  27.  
  28. long VlozDalsi(int Y, int sach[N])
  29. {
  30.     long pocet = 0;
  31.     for (int i=0; i<N; i++)
  32.     {
  33.         if (PripustnePole(Y,i,sach))
  34.         {
  35.             if(Y==N-1)
  36.             {
  37.                 pocet++;
  38.                 break;
  39.             }
  40.             else
  41.             {
  42.                 sach[Y]=i;
  43.                 pocet = pocet + VlozDalsi(Y+1,sach);
  44.                 sach[Y]=0;
  45.             }
  46.         }
  47.     }
  48.     return pocet;
  49. }
  50.  
  51.  
  52. long Volej (int prvni)
  53. {
  54.     int sach[N];
  55.  
  56.     for (int i=0; i<N; i++){sach[i]=0;}
  57.  
  58.     sach[0]=prvni;
  59.  
  60.     return VlozDalsi(1,sach);
  61. }
  62.  
  63. int main()
  64. {
  65.     long pocet_reseni = 0;
  66.     long res[N];
  67.  
  68.     omp_set_num_threads(1);
  69.  
  70.     time_t prvni;
  71.     prvni = time (NULL);
  72.  
  73.     #pragma omp parallel for
  74.     for(int z = 0; z < N; z++)
  75.     {
  76.         res[z] = Volej(z);
  77.     }
  78.  
  79.     for(int z = 0; z < N; z++)
  80.     {
  81.         pocet_reseni = pocet_reseni + res[z];
  82.     }
  83.  
  84.     time_t druhy;
  85.     druhy = time (NULL);
  86.     cout << "Cas: " << difftime(druhy,prvni) << " sec.\n";
  87.    
  88.     long pocet_reseni = 0;
  89.     long res[N];
  90.  
  91.     omp_set_num_threads(2);
  92.  
  93.     time_t prvni;
  94.     prvni = time (NULL);
  95.  
  96.     #pragma omp parallel for
  97.     for(int z = 0; z < N; z++)
  98.     {
  99.         res[z] = Volej(z);
  100.     }
  101.  
  102.     for(int z = 0; z < N; z++)
  103.     {
  104.         pocet_reseni = pocet_reseni + res[z];
  105.     }
  106.  
  107.     time_t druhy;
  108.     druhy = time (NULL);
  109.     cout << "Cas: " << difftime(druhy,prvni) << " sec.\n";
  110.    
  111.     long pocet_reseni = 0;
  112.     long res[N];
  113.  
  114.     omp_set_num_threads(4);
  115.  
  116.     time_t prvni;
  117.     prvni = time (NULL);
  118.  
  119.     #pragma omp parallel for
  120.     for(int z = 0; z < N; z++)
  121.     {
  122.         res[z] = Volej(z);
  123.     }
  124.  
  125.     for(int z = 0; z < N; z++)
  126.     {
  127.         pocet_reseni = pocet_reseni + res[z];
  128.     }
  129.  
  130.     time_t druhy;
  131.     druhy = time (NULL);
  132.     cout << "Cas: " << difftime(druhy,prvni) << " sec.\n";
  133.    
  134.  long pocet_reseni = 0;
  135.     long res[N];
  136.  
  137.     omp_set_num_threads(8);
  138.  
  139.     time_t prvni;
  140.     prvni = time (NULL);
  141.  
  142.     #pragma omp parallel for
  143.     for(int z = 0; z < N; z++)
  144.     {
  145.         res[z] = Volej(z);
  146.     }
  147.  
  148.     for(int z = 0; z < N; z++)
  149.     {
  150.         pocet_reseni = pocet_reseni + res[z];
  151.     }
  152.  
  153.     time_t druhy;
  154.     druhy = time (NULL);
  155.     cout << "Cas: " << difftime(druhy,prvni) << " sec.\n";
  156.  
  157.     return 0;
  158. }
RAW Paste Data
Top