30{
31
32 int random = 0;
33 int rfc = 1;
34
35 if ( ! ( k > 0 && m > 0 && column_weight > 0 && (random > 0 || rfc > 0) ) )
36 {
37 return EXIT_FAILURE;
38 }
39
40 char **pc_matrix;
41
42 pc_matrix = (char**)malloc(m*sizeof(char*));
43 for ( unsigned int i = 0; i < m; i++)
44 pc_matrix[i] = (char*)calloc(k, sizeof(char));
45
46
47
48 if (random)
49 {
50 srand(time(NULL));
51 for ( unsigned int i = 0; i < k; ++i ) {
52 for ( unsigned int j = 0; j < column_weight; ++j) {
53 pc_matrix[rand()%m][i] = 1;
54 }
55 }
56 }
57
58 if (rfc)
59 {
61 }
62
63
64
65
66 if (extend_rows > 0)
67 {
70
71 for ( unsigned int i = m; i < m + extend_rows; i++ )
72 {
74 for ( unsigned int j = 1; j < k; j++)
75 {
76 if (pc_matrix[row][j - 1])
77 {
78 pc_matrix[i][j] = 1;
79 }
80 }
81 if (pc_matrix[row][k - 1])
82 {
83 pc_matrix[i][0] = 1;
84 }
85 }
86 }
87
88 m += extend_rows;
89
90 int max_weight = 0;
91
92 for ( unsigned int i = 0; i < m; i++)
93 {
94 int m = 0;
95 for ( unsigned int j = 0; j < k; j++)
96 if( pc_matrix[i][j])
97 m++;
98 if ( m > max_weight )
99 max_weight = m;
100 }
101
102
103
104
105
106
107
108
109
110
111 int **pcm;
112 pcm = (int**)malloc(m*sizeof(int*));
113 for ( unsigned int i = 0; i < m; i++)
114 pcm[i] = (int*)malloc((max_weight+2) * sizeof(int));
115
116
117 int columns = max_weight + 2;
118 int counter = 0;
119 for ( unsigned int i = 0; i < m; i++ )
120 {
121 for ( unsigned int j = 0; j < k; j++)
122 if( pc_matrix[i][j])
123 {
124 pcm[i][counter] = j;
125 counter++;
126 }
127
128 pcm[i][counter] = k + i;
129 counter++;
130
131 if ( i > 0 )
132 {
133 pcm[i][counter] = k + i - 1;
134 counter++;
135 }
136
137 if ( counter < columns )
138 for ( int j = counter; j < columns; j++)
139 pcm[i][j] = -1;
140 counter = 0;
141 }
142
143
144
145
146
147
148
149
150 FILE *out;
151
152 int tmp;
153
154 out = fopen (fname, "wb");
155 if(out)
156 {
157 fprintf( out, "%d ", k);
158 fprintf( out, "%d ", m);
159 fprintf( out, "%d\n", columns);
160 for ( unsigned int i = 0; i < m; i++)
161 {
162 for ( int j = 0; j < columns; j++)
163 {
164 int t = pcm[i][j];
165 tmp = fwrite(&t, sizeof(int), 1, out);
166 if (tmp != 1)
167 fprintf(stderr, "Cannot write to output file!");
168 }
169
170 }
171 fflush(out);
172 fclose(out);
173 } else
174 {
175 fprintf(stderr, "Cannot open file for writing.");
176 }
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219 for ( unsigned int i = 0; i < m; i++)
220 free(pc_matrix[i]);
221 free(pc_matrix);
222 for ( unsigned int i = 0; i < m; i++)
223 free(pcm[i]);
224 free(pcm);
225
226 return EXIT_SUCCESS;
227}
void seedi(unsigned long int s)
unsigned long int pmms_rand(unsigned long int maxv)
void left_matrix_init(char **matrix, int k, int n, int N1, int seed)