Advertisement
Guest User

Untitled

a guest
May 29th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "stdafx.h"
  2. #include <stdlib.h>
  3. #include <cstdlib>
  4. #include <iostream>
  5. #include <time.h>
  6. #include <Windows.h>
  7. #include <string>
  8. #define threadCount 4
  9.  
  10. #define random() (float)rand()/(float)RAND_MAX
  11. #define nmax 20
  12. CRITICAL_SECTION sekcja;
  13. using namespace std;
  14.     typedef int t2[nmax][nmax];
  15.     typedef int t1[nmax];
  16.    
  17. void permInit(int n, t1 p)
  18. {
  19.     int i;
  20.     for (i=0;i<n;i++)
  21.         p[i]=i;
  22.     }
  23.    
  24. int permNext(int n, t1 p)
  25. {
  26.     int i,j,x,b;
  27.     b=0;
  28.       i=n1;
  29.         while (i>0)
  30.     {
  31.         if (p[i]>p[i1])
  32.         {
  33.             j=n1;
  34.               while (p[j] < p[i1])
  35.                   j;
  36.                   x=p[j];
  37.                     p[j]=p[i1]
  38.                          ;
  39.                          p[i1]=
  40.                              x;
  41.                              while (i<n)
  42.                 {
  43.                     x=p[i]; p[i]=p[n1]
  44.                                   ; p[n1]=
  45.                                       x;
  46.                                       i++; n;
  47.                 };
  48.             b=1;
  49.               break;
  50.         }
  51.         i;
  52.     }
  53.     return b;
  54. }
  55. void druk(int n, int L, t1 p)
  56. {
  57.     int i;
  58.     printf("%d: ",L);
  59.     for (i=0;i<n;i++)
  60.         printf("%d ",p[i]);
  61.         printf("\n");
  62.     }
  63.    
  64. void gnp(int n, float p, t2 A)
  65. {
  66. int i,j;
  67. for (i=0;i<n;i++) A[i][i] = 0;
  68.                                   for (i=0;i<n1;i++)
  69.                                       for (j=i+1;j<n;j++)
  70.         {
  71.             A[i][j]=A[j][i]= (random() <= p);
  72.         }
  73. }
  74.  
  75. int maxDiffrence(int n, t2 A, t1 perm)
  76. {
  77.     int dist, best = 1;
  78.                      int i,j;
  79.                      for (i=0;i<n1;i++)
  80.                          for (j=i+1;j<n;j++) if (A[i][j])
  81.             {
  82.                 dist = abs(perm[i]perm[
  83.                                j]);
  84.                        if (dist>best) best = dist;
  85.                 }
  86.     return best;
  87. }
  88. float p = 0.5f;
  89.           t2 A;
  90.           t1 perm;
  91.           int n = 5;
  92.                   int naj_r,szerokosc;
  93.                   int L = 1;
  94.                           int* wyniki;
  95.                           DWORD WINAPI countPartially(LPVOID i)
  96. {
  97.     t1 permtemp;
  98.     int x = (int)i;
  99.             for (int j =1;j<n;j++)
  100.     {
  101.         permtemp[j] = perm[j];
  102.     }
  103.     permtemp[0] = x;
  104.                   permtemp[x] = 0;
  105.                                 int temp = 0;
  106.                                            for (int k = 1;k<n;k++)
  107.     {
  108.         for (int l = 1;l<n1;l++)
  109.         {
  110.             if (permtemp[l]>permtemp[l+1])
  111.             {
  112.                 temp = permtemp[l];
  113.                        permtemp[l] = permtemp[l+1];
  114.                                      permtemp[l+1] = temp;
  115.             }
  116.         }
  117.     }
  118.     int max;
  119.     do
  120.     {
  121.         if (permtemp[0]!=x) break;
  122.             max = maxDiffrence(n,A,permtemp);
  123.                   if (max<szerokosc) szerokosc = max;
  124.                                                      printf("Watek %d: ",x);
  125.                                                      druk(n,L,permtemp);
  126.                                                      L++;
  127.             }
  128.     while (permNext(n,permtemp));
  129.         wyniki[x] = szerokosc;
  130.                     return 0;
  131.     }
  132.  
  133. void count ()
  134. {
  135.     wyniki = new int[n];
  136.     HANDLE *threads = new HANDLE [n];
  137.     for (int i = 0; i<n ;i++)
  138.     {
  139.         threads[i] = CreateThread( NULL, 0, countPartially, (LPVOID) i,0,NULL);
  140.     }
  141.     WaitForMultipleObjects((DWORD)n,threads,true,INFINITE);
  142.     delete threads;
  143. }
  144.  
  145. int _tmain(int argc, _TCHAR* argv[])
  146. {
  147.     gnp(n,p,A);
  148.     szerokosc = n1;
  149.                 permInit(n,perm);
  150.                 count();
  151.                 int min = n;
  152.                           for (int i = 0;i<n;i++)
  153.     {
  154.         if (wyniki[i]< min) min = wyniki[i];
  155.         }
  156.     printf("\nSzerokosc grafu %d\n\n\n",min);
  157.     system("pause");
  158.     return 0;
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement