@@ -92,25 +92,350 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3300-3399/3311.Co
92
92
#### Python3
93
93
94
94
``` python
95
-
95
+ class Solution :
96
+ def constructGridLayout (self , n : int , edges : List[List[int ]]) -> List[List[int ]]:
97
+ g = [[] for _ in range (n)]
98
+ for u, v in edges:
99
+ g[u].append(v)
100
+ g[v].append(u)
101
+ deg = [- 1 ] * 5
102
+ for x, ys in enumerate (g):
103
+ deg[len (ys)] = x
104
+ if deg[1 ] != - 1 :
105
+ row = [deg[1 ]]
106
+ elif deg[4 ] == - 1 :
107
+ x = deg[2 ]
108
+ for y in g[x]:
109
+ if len (g[y]) == 2 :
110
+ row = [x, y]
111
+ break
112
+ else :
113
+ x = deg[2 ]
114
+ row = [x]
115
+ pre = x
116
+ x = g[x][0 ]
117
+ while len (g[x]) > 2 :
118
+ row.append(x)
119
+ for y in g[x]:
120
+ if y != pre and len (g[y]) < 4 :
121
+ pre = x
122
+ x = y
123
+ break
124
+ row.append(x)
125
+
126
+ ans = [row]
127
+ vis = [False ] * n
128
+ for _ in range (n // len (row) - 1 ):
129
+ for x in row:
130
+ vis[x] = True
131
+ nxt = []
132
+ for x in row:
133
+ for y in g[x]:
134
+ if not vis[y]:
135
+ nxt.append(y)
136
+ break
137
+ ans.append(nxt)
138
+ row = nxt
139
+ return ans
96
140
```
97
141
98
142
#### Java
99
143
100
144
``` java
101
-
145
+ class Solution {
146
+ public int [][] constructGridLayout (int n , int [][] edges ) {
147
+ List<Integer > [] g = new List [n];
148
+ Arrays . setAll(g, k - > new ArrayList<> ());
149
+ for (int [] e : edges) {
150
+ int u = e[0 ], v = e[1 ];
151
+ g[u]. add(v);
152
+ g[v]. add(u);
153
+ }
154
+
155
+ int [] deg = new int [5 ];
156
+ Arrays . fill(deg, - 1 );
157
+
158
+ for (int x = 0 ; x < n; x++ ) {
159
+ deg[g[x]. size()] = x;
160
+ }
161
+
162
+ List<Integer > row = new ArrayList<> ();
163
+ if (deg[1 ] != - 1 ) {
164
+ row. add(deg[1 ]);
165
+ } else if (deg[4 ] == - 1 ) {
166
+ int x = deg[2 ];
167
+ for (int y : g[x]) {
168
+ if (g[y]. size() == 2 ) {
169
+ row. add(x);
170
+ row. add(y);
171
+ break ;
172
+ }
173
+ }
174
+ } else {
175
+ int x = deg[2 ];
176
+ row. add(x);
177
+ int pre = x;
178
+ x = g[x]. get(0 );
179
+ while (g[x]. size() > 2 ) {
180
+ row. add(x);
181
+ for (int y : g[x]) {
182
+ if (y != pre && g[y]. size() < 4 ) {
183
+ pre = x;
184
+ x = y;
185
+ break ;
186
+ }
187
+ }
188
+ }
189
+ row. add(x);
190
+ }
191
+
192
+ List<List<Integer > > res = new ArrayList<> ();
193
+ res. add(new ArrayList<> (row));
194
+
195
+ boolean [] vis = new boolean [n];
196
+ int rowSize = row. size();
197
+ for (int i = 0 ; i < n / rowSize - 1 ; i++ ) {
198
+ for (int x : row) {
199
+ vis[x] = true ;
200
+ }
201
+ List<Integer > nxt = new ArrayList<> ();
202
+ for (int x : row) {
203
+ for (int y : g[x]) {
204
+ if (! vis[y]) {
205
+ nxt. add(y);
206
+ break ;
207
+ }
208
+ }
209
+ }
210
+ res. add(new ArrayList<> (nxt));
211
+ row = nxt;
212
+ }
213
+
214
+ int [][] ans = new int [res. size()][rowSize];
215
+ for (int i = 0 ; i < res. size(); i++ ) {
216
+ for (int j = 0 ; j < rowSize; j++ ) {
217
+ ans[i][j] = res. get(i). get(j);
218
+ }
219
+ }
220
+ return ans;
221
+ }
222
+ }
102
223
```
103
224
104
225
#### C++
105
226
106
227
``` cpp
107
-
228
+ class Solution {
229
+ public:
230
+ vector<vector<int >> constructGridLayout(int n, vector<vector<int >>& edges) {
231
+ vector<vector<int >> g(n);
232
+ for (auto& e : edges) {
233
+ int u = e[ 0] , v = e[ 1] ;
234
+ g[ u] .push_back(v);
235
+ g[ v] .push_back(u);
236
+ }
237
+
238
+ vector<int> deg(5, -1);
239
+ for (int x = 0; x < n; ++x) {
240
+ deg[g[x].size()] = x;
241
+ }
242
+
243
+ vector<int > row;
244
+ if (deg[1 ] != -1 ) {
245
+ row.push_back(deg[1]);
246
+ } else if (deg[4] == -1) {
247
+ int x = deg[2];
248
+ for (int y : g[x]) {
249
+ if (g[y].size() == 2) {
250
+ row.push_back(x);
251
+ row.push_back(y);
252
+ break;
253
+ }
254
+ }
255
+ } else {
256
+ int x = deg[2];
257
+ row.push_back(x);
258
+ int pre = x;
259
+ x = g[x][0];
260
+ while (g[x].size() > 2) {
261
+ row.push_back(x);
262
+ for (int y : g[x]) {
263
+ if (y != pre && g[y].size() < 4) {
264
+ pre = x;
265
+ x = y;
266
+ break;
267
+ }
268
+ }
269
+ }
270
+ row.push_back(x);
271
+ }
272
+
273
+ vector<vector<int>> ans;
274
+ ans.push_back(row);
275
+ vector<bool> vis(n, false);
276
+ int rowSize = row.size();
277
+ for (int i = 0; i < n / rowSize - 1; ++i) {
278
+ for (int x : row) {
279
+ vis[x] = true;
280
+ }
281
+ vector<int> nxt;
282
+ for (int x : row) {
283
+ for (int y : g[x]) {
284
+ if (!vis[y]) {
285
+ nxt.push_back(y);
286
+ break;
287
+ }
288
+ }
289
+ }
290
+ ans.push_back(nxt);
291
+ row = nxt;
292
+ }
293
+
294
+ return ans;
295
+ }
296
+ };
108
297
```
109
298
110
299
#### Go
111
300
112
301
``` go
302
+ func constructGridLayout (n int , edges [][]int ) [][]int {
303
+ g := make ([][]int , n)
304
+ for _ , e := range edges {
305
+ u , v := e[0 ], e[1 ]
306
+ g[u] = append (g[u], v)
307
+ g[v] = append (g[v], u)
308
+ }
309
+
310
+ deg := make ([]int , 5 )
311
+ for i := range deg {
312
+ deg[i] = -1
313
+ }
314
+
315
+ for x := 0 ; x < n; x++ {
316
+ deg[len (g[x])] = x
317
+ }
318
+
319
+ var row []int
320
+ if deg[1 ] != -1 {
321
+ row = append (row, deg[1 ])
322
+ } else if deg[4 ] == -1 {
323
+ x := deg[2 ]
324
+ for _ , y := range g[x] {
325
+ if len (g[y]) == 2 {
326
+ row = append (row, x, y)
327
+ break
328
+ }
329
+ }
330
+ } else {
331
+ x := deg[2 ]
332
+ row = append (row, x)
333
+ pre := x
334
+ x = g[x][0 ]
335
+ for len (g[x]) > 2 {
336
+ row = append (row, x)
337
+ for _ , y := range g[x] {
338
+ if y != pre && len (g[y]) < 4 {
339
+ pre = x
340
+ x = y
341
+ break
342
+ }
343
+ }
344
+ }
345
+ row = append (row, x)
346
+ }
347
+
348
+ ans := [][]int {row}
349
+ vis := make ([]bool , n)
350
+ rowSize := len (row)
351
+ for i := 0 ; i < n/rowSize-1 ; i++ {
352
+ for _ , x := range row {
353
+ vis[x] = true
354
+ }
355
+ nxt := []int {}
356
+ for _ , x := range row {
357
+ for _ , y := range g[x] {
358
+ if !vis[y] {
359
+ nxt = append (nxt, y)
360
+ break
361
+ }
362
+ }
363
+ }
364
+ ans = append (ans, nxt)
365
+ row = nxt
366
+ }
367
+
368
+ return ans
369
+ }
370
+ ```
113
371
372
+ #### TypeScript
373
+
374
+ ``` ts
375
+ function constructGridLayout(n : number , edges : number [][]): number [][] {
376
+ const g: number [][] = Array .from ({ length: n }, () => []);
377
+ for (const [u, v] of edges ) {
378
+ g [u ].push (v );
379
+ g [v ].push (u );
380
+ }
381
+
382
+ const deg: number [] = Array (5 ).fill (- 1 );
383
+ for (let x = 0 ; x < n ; x ++ ) {
384
+ deg [g [x ].length ] = x ;
385
+ }
386
+
387
+ let row: number [] = [];
388
+ if (deg [1 ] !== - 1 ) {
389
+ row .push (deg [1 ]);
390
+ } else if (deg [4 ] === - 1 ) {
391
+ let x = deg [2 ];
392
+ for (const y of g [x ]) {
393
+ if (g [y ].length === 2 ) {
394
+ row .push (x , y );
395
+ break ;
396
+ }
397
+ }
398
+ } else {
399
+ let x = deg [2 ];
400
+ row .push (x );
401
+ let pre = x ;
402
+ x = g [x ][0 ];
403
+ while (g [x ].length > 2 ) {
404
+ row .push (x );
405
+ for (const y of g [x ]) {
406
+ if (y !== pre && g [y ].length < 4 ) {
407
+ pre = x ;
408
+ x = y ;
409
+ break ;
410
+ }
411
+ }
412
+ }
413
+ row .push (x );
414
+ }
415
+
416
+ const ans: number [][] = [row ];
417
+ const vis: boolean [] = Array (n ).fill (false );
418
+ const rowSize = row .length ;
419
+
420
+ for (let i = 0 ; i < Math .floor (n / rowSize ) - 1 ; i ++ ) {
421
+ for (const x of row ) {
422
+ vis [x ] = true ;
423
+ }
424
+ const nxt: number [] = [];
425
+ for (const x of row ) {
426
+ for (const y of g [x ]) {
427
+ if (! vis [y ]) {
428
+ nxt .push (y );
429
+ break ;
430
+ }
431
+ }
432
+ }
433
+ ans .push (nxt );
434
+ row = nxt ;
435
+ }
436
+
437
+ return ans ;
438
+ }
114
439
```
115
440
116
441
<!-- tabs:end -->
0 commit comments