SHOW:
|
|
- or go back to the newest paste.
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 | - | CRITICAL_SECTION sekcja; |
13 | + | using namespace std; |
14 | - | using namespace std; |
14 | + | typedef int t2[nmax][nmax]; |
15 | - | typedef int t2[nmax][nmax]; |
15 | + | typedef int t1[nmax]; |
16 | - | typedef int t1[nmax]; |
16 | + | |
17 | void permInit(int n, t1 p) | |
18 | - | void gnp(int n, float p, t2 A) |
18 | + | |
19 | int i; | |
20 | - | int i,j; |
20 | + | for (i=0;i<n;i++) |
21 | - | for (i=0;i<n;i++) A[i][i] = 0; |
21 | + | p[i]=i; |
22 | - | for (i=0;i<n1;i++) |
22 | + | |
23 | - | for (j=i+1;j<n;j++) |
23 | + | |
24 | int permNext(int n, t1 p) | |
25 | - | A[i][j]=A[j][i]= (random() <= p); |
25 | + | |
26 | int i,j,x,b; | |
27 | b=0; | |
28 | i=n1; | |
29 | while (i>0) | |
30 | { | |
31 | - | int i; |
31 | + | |
32 | - | for (i=0;i<n;i++) |
32 | + | |
33 | - | p[i]=i; |
33 | + | j=n1; |
34 | while (p[j] < p[i1]) | |
35 | j; | |
36 | x=p[j]; | |
37 | p[j]=p[i1] | |
38 | - | int i; |
38 | + | ; |
39 | - | printf("%d: ",L); |
39 | + | |
40 | - | for (i=0;i<n;i++) |
40 | + | x; |
41 | - | printf("%d ",p[i]); |
41 | + | |
42 | - | printf("\n"); |
42 | + | |
43 | x=p[i]; p[i]=p[n1] | |
44 | ; p[n1]= | |
45 | x; | |
46 | i++; n; | |
47 | - | int i,j,x,b; |
47 | + | }; |
48 | - | b=0; |
48 | + | b=1; |
49 | - | i=n1; |
49 | + | break; |
50 | } | |
51 | i; | |
52 | } | |
53 | return b; | |
54 | - | j=n1; |
54 | + | |
55 | void druk(int n, int L, t1 p) | |
56 | - | j; |
56 | + | |
57 | - | x=p[j]; |
57 | + | int i; |
58 | printf("%d: ",L); | |
59 | - | ; |
59 | + | for (i=0;i<n;i++) |
60 | printf("%d ",p[i]); | |
61 | - | x; |
61 | + | printf("\n"); |
62 | } | |
63 | ||
64 | - | x=p[i]; p[i]=p[n1] |
64 | + | void gnp(int n, float p, t2 A) |
65 | - | ; p[n1]= |
65 | + | |
66 | - | x; |
66 | + | int i,j; |
67 | - | i++; n; |
67 | + | for (i=0;i<n;i++) A[i][i] = 0; |
68 | - | }; |
68 | + | for (i=0;i<n1;i++) |
69 | - | b=1; |
69 | + | for (j=i+1;j<n;j++) |
70 | - | break; |
70 | + | |
71 | A[i][j]=A[j][i]= (random() <= p); | |
72 | - | i; |
72 | + | |
73 | } | |
74 | - | return b; |
74 | + | |
75 | int maxDiffrence(int n, t2 A, t1 perm) | |
76 | { | |
77 | int dist, best = 1; | |
78 | int i,j; | |
79 | - | int dist, best = 1; |
79 | + | for (i=0;i<n1;i++) |
80 | - | int i,j; |
80 | + | for (j=i+1;j<n;j++) if (A[i][j]) |
81 | - | for (i=0;i<n1;i++) |
81 | + | |
82 | - | for (j=i+1;j<n;j++) if (A[i][j]) |
82 | + | |
83 | j]); | |
84 | if (dist>best) best = dist; | |
85 | - | j]); |
85 | + | |
86 | - | if (dist>best) best = dist; |
86 | + | return best; |
87 | } | |
88 | - | return best; |
88 | + | float p = 0.5f; |
89 | t2 A; | |
90 | - | float p = 0.5f; |
90 | + | t1 perm; |
91 | - | t2 A; |
91 | + | int n = 5; |
92 | - | t1 perm; |
92 | + | int naj_r,szerokosc; |
93 | - | int n = 5; |
93 | + | int L = 1; |
94 | - | int naj_r,szerokosc; |
94 | + | int* wyniki; |
95 | - | int L = 1; |
95 | + | |
96 | - | int* wyniki; |
96 | + | |
97 | t1 permtemp; | |
98 | int x = (int)i; | |
99 | - | t1 permtemp; |
99 | + | for (int j =1;j<n;j++) |
100 | - | int x = (int)i; |
100 | + | |
101 | - | for (int j =1;j<n;j++) |
101 | + | permtemp[j] = perm[j]; |
102 | } | |
103 | - | permtemp[j] = perm[j]; |
103 | + | permtemp[0] = x; |
104 | permtemp[x] = 0; | |
105 | - | permtemp[0] = x; |
105 | + | int temp = 0; |
106 | - | permtemp[x] = 0; |
106 | + | for (int k = 1;k<n;k++) |
107 | - | int temp = 0; |
107 | + | |
108 | - | for (int k = 1;k<n;k++) |
108 | + | for (int l = 1;l<n1;l++) |
109 | { | |
110 | - | for (int l = 1;l<n1;l++) |
110 | + | |
111 | { | |
112 | temp = permtemp[l]; | |
113 | permtemp[l] = permtemp[l+1]; | |
114 | - | temp = permtemp[l]; |
114 | + | permtemp[l+1] = temp; |
115 | - | permtemp[l] = permtemp[l+1]; |
115 | + | |
116 | - | permtemp[l+1] = temp; |
116 | + | |
117 | } | |
118 | int max; | |
119 | do | |
120 | - | int max; |
120 | + | |
121 | if (permtemp[0]!=x) break; | |
122 | max = maxDiffrence(n,A,permtemp); | |
123 | - | if (permtemp[0]!=x) break; |
123 | + | if (max<szerokosc) szerokosc = max; |
124 | - | max = maxDiffrence(n,A,permtemp); |
124 | + | printf("Watek %d: ",x); |
125 | - | if (max<szerokosc) szerokosc = max; |
125 | + | druk(n,L,permtemp); |
126 | - | printf("Watek %d: ",x); |
126 | + | L++; |
127 | - | druk(n,L,permtemp); |
127 | + | |
128 | - | L++; |
128 | + | while (permNext(n,permtemp)); |
129 | wyniki[x] = szerokosc; | |
130 | - | while (permNext(n,permtemp)); |
130 | + | return 0; |
131 | - | wyniki[x] = szerokosc; |
131 | + | |
132 | - | return 0; |
132 | + | |
133 | void count () | |
134 | { | |
135 | wyniki = new int[n]; | |
136 | HANDLE *threads = new HANDLE [n]; | |
137 | - | wyniki = new int[n]; |
137 | + | for (int i = 0; i<n ;i++) |
138 | - | HANDLE *threads = new HANDLE [n]; |
138 | + | |
139 | - | for (int i = 0; i<n ;i++) |
139 | + | threads[i] = CreateThread( NULL, 0, countPartially, (LPVOID) i,0,NULL); |
140 | } | |
141 | - | threads[i] = CreateThread( NULL, 0, countPartially, (LPVOID) i,0,NULL); |
141 | + | WaitForMultipleObjects((DWORD)n,threads,true,INFINITE); |
142 | delete threads; | |
143 | - | WaitForMultipleObjects((DWORD)n,threads,true,INFINITE); |
143 | + | |
144 | - | delete threads; |
144 | + | |
145 | int _tmain(int argc, _TCHAR* argv[]) | |
146 | { | |
147 | gnp(n,p,A); | |
148 | szerokosc = n1; | |
149 | - | gnp(n,p,A); |
149 | + | permInit(n,perm); |
150 | - | szerokosc = n1; |
150 | + | count(); |
151 | - | permInit(n,perm); |
151 | + | int min = n; |
152 | - | count(); |
152 | + | for (int i = 0;i<n;i++) |
153 | - | int min = n; |
153 | + | |
154 | - | for (int i = 0;i<n;i++) |
154 | + | if (wyniki[i]< min) min = wyniki[i]; |
155 | } | |
156 | - | if (wyniki[i]< min) min = wyniki[i]; |
156 | + | printf("\nSzerokosc grafu %d\n\n\n",min); |
157 | system("pause"); | |
158 | - | printf("\nSzerokosc grafu %d\n\n\n",min); |
158 | + | return 0; |
159 | - | system("pause"); |
159 | + |