Guest User

Untitled

a guest
Feb 25th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <omp.h>
  3. #include <iostream>
  4. #include <stdlib.h>
  5.  
  6. using namespace std;
  7.  
  8. #define size 20
  9. typedef int tab2[size][size], tab1[size];
  10. #define random() (float)rand()/(float)RAND_MAX
  11.  
  12. void gnp(int n, float p, tab2 A)
  13. {
  14. int i, j;
  15.  
  16. for (i = 0; i < n - 1; i++)
  17. {
  18. for (j = i + 1; j < n; j++)
  19. {
  20. A[i][j] = A[j][i] = (random() <= p);
  21. }
  22. }
  23.  
  24. for (i = 0; i < n; i++)
  25. {
  26. A[i][i] = 0;
  27. }
  28.  
  29. for (i = 0; i < n - 1; i++)
  30. {
  31. for (j =0; j < n; j++)
  32. {
  33. cout << A[i][j] << " ";
  34. }
  35. cout << endl;
  36. }
  37. }
  38.  
  39. void permInit(int n, tab1 p)
  40. {
  41. int i;
  42. for (i = 0; i < n; i++)
  43. {
  44. p[i] = i;
  45. }
  46. }
  47.  
  48.  
  49. int permNext(int n, tab1 p)
  50. {
  51. int i, j, x, b;
  52. b = 0;
  53.  
  54. i = n - 1;
  55.  
  56. while (i>0) {
  57. if (p[i]>p[i - 1]) {
  58. j = n - 1;
  59. while (p[j] < p[i - 1]) j--;
  60. x = p[j]; p[j] = p[i - 1]; p[i - 1] = x;
  61. while (i<n) {
  62. x = p[i]; p[i] = p[n - 1]; p[n - 1] = x;
  63. i++; n--;
  64. };
  65. b = 1;
  66. break;
  67. }
  68. i--;
  69. }
  70. return b;
  71. }
  72.  
  73. int differ(int n, tab2 A, tab1 perm)
  74. {
  75.  
  76. int dist, best = 1;
  77. int i, j;
  78. for (i = 0; i<n - 1; i++)
  79. for (j = i + 1; j<n; j++) if (A[i][j])
  80. {
  81. dist = abs(perm[i] - perm[j]);
  82. if (dist>best) best = dist;
  83. }
  84. return best;
  85. }
  86.  
  87. int _tmain(int argc, _TCHAR* argv[])
  88. {
  89. tab2 A;
  90. tab1 perm;
  91. float p = 0.5;
  92. int n = 5;
  93. int g_diff, width;
  94. int L = 1;
  95.  
  96. gnp(n, p, A);
  97. width = n - 1;
  98.  
  99. permInit(n, perm);
  100. omp_lock_t lck1;
  101. omp_init_lock(&lck1);
  102.  
  103. #pragma omp parallel
  104. {
  105. do {
  106. g_diff = differ(n, A, perm);
  107. omp_set_lock(&lck1);
  108. if (g_diff < width) width = g_diff;
  109. omp_unset_lock(&lck1);
  110. L++;
  111. }
  112. while (permNext(n, perm));
  113. }
  114.  
  115. return 0;
  116. }
Add Comment
Please, Sign In to add comment