回答編集履歴

2

書式の改善

2021/11/05 08:07

投稿

luuguas
luuguas

スコア492

test CHANGED
@@ -242,7 +242,7 @@
242
242
 
243
243
 
244
244
 
245
- ### 4.main関数の処理
245
+ ### 4. main関数の処理
246
246
 
247
247
  ```C++
248
248
 

1

降順を昇順に変更

2021/11/05 08:07

投稿

luuguas
luuguas

スコア492

test CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
  ```
104
104
 
105
- ループの条件は「rootよりも子のほうがcostが大きい」です。これはwhile文で判断するには条件が複雑なので、`while (true)`とし、whileループ内でrootと子の大小を比較します。そして、rootよりも子のほうが大きい場合はスワップし、rootのほうが大きい場合はbreak文でループを抜けます。また、rootが子を持つかどうかの判断も必要なため、asizeを引数にします。(leaf引数は削除)
105
+ ループ(スワップ)の条件は「rootよりも子のほうがcostが小さい」です。これはwhile文で判断するには条件が複雑なので、`while (true)`とし、whileループ内でrootと子の大小を比較します。そして、rootよりも子のほうが小さい場合はスワップし、rootのほうが小さい場合はbreak文でループを抜けます。また、rootが子を持つかどうかの判断も必要なため、asizeを引数にします。(leaf引数は削除)
106
106
 
107
107
 
108
108
 
@@ -140,37 +140,37 @@
140
140
 
141
141
  {
142
142
 
143
- int largest; //rootと子ノードのうち最もcostが大きいノード
143
+ int smallest; //rootと子ノードのうち最もcostが小さいノード
144
144
 
145
145
  while (true)
146
146
 
147
147
  {
148
148
 
149
- largest = root;
149
+ smallest = root;
150
-
150
+
151
- if (left(root) < asize && a[left(root)].cost > a[largest].cost)
151
+ if (left(root) < asize && a[left(root)].cost < a[smallest].cost)
152
-
152
+
153
- largest = left(root); //rootが左の子を持ち、かつ左の子がlargestよりも大きいとき
153
+ smallest = left(root); //rootが左の子を持ち、かつ左の子がsmallestよりも小さいとき
154
-
154
+
155
- if (right(root) < asize && a[right(root)].cost > a[largest].cost)
155
+ if (right(root) < asize && a[right(root)].cost < a[smallest].cost)
156
-
156
+
157
- largest = right(root); //rootが右の子を持ち、かつ右の子がlargestよりも大きいとき
157
+ smallest = right(root); //rootが右の子を持ち、かつ右の子がsmallestよりも小さいとき
158
-
159
-
160
-
158
+
159
+
160
+
161
- if (largest == root)
161
+ if (smallest == root)
162
-
162
+
163
- break; //rootが最ならループを抜ける
163
+ break; //rootが最ならループを抜ける
164
164
 
165
165
  else
166
166
 
167
167
  {
168
168
 
169
- //子のほうが大きいならスワップする
169
+ //子のほうが小さいならスワップする
170
-
170
+
171
- swap(a, root, largest);
171
+ swap(a, root, smallest);
172
-
172
+
173
- root = largest;
173
+ root = smallest;
174
174
 
175
175
  }
176
176
 
@@ -402,25 +402,25 @@
402
402
 
403
403
  {
404
404
 
405
- int largest;
405
+ int smallest;
406
406
 
407
407
  while (true)
408
408
 
409
409
  {
410
410
 
411
- largest = root;
411
+ smallest = root;
412
-
412
+
413
- if (left(root) < asize && a[left(root)].cost > a[largest].cost)
413
+ if (left(root) < asize && a[left(root)].cost < a[smallest].cost)
414
-
414
+
415
- largest = left(root);
415
+ smallest = left(root);
416
-
416
+
417
- if (right(root) < asize && a[right(root)].cost > a[largest].cost)
417
+ if (right(root) < asize && a[right(root)].cost < a[smallest].cost)
418
-
418
+
419
- largest = right(root);
419
+ smallest = right(root);
420
-
421
-
422
-
420
+
421
+
422
+
423
- if (largest == root)
423
+ if (smallest == root)
424
424
 
425
425
  break;
426
426
 
@@ -428,9 +428,9 @@
428
428
 
429
429
  {
430
430
 
431
- swap(a, root, largest);
431
+ swap(a, root, smallest);
432
-
432
+
433
- root = largest;
433
+ root = smallest;
434
434
 
435
435
  }
436
436
 
@@ -538,29 +538,29 @@
538
538
 
539
539
  (id/cost)
540
540
 
541
- 0/6
541
+ 0/29
542
-
542
+
543
- 1/53 2/81
543
+ 1/87 2/72
544
-
544
+
545
- 3/13 4/17 5/33 6/38
545
+ 3/52 4/31 5/76 6/1
546
-
546
+
547
- 7/20 8/100 9/32 10/46 11/4 12/46 13/64 14/78
547
+ 7/54 8/38 9/69 10/74 11/100 12/44 13/4 14/30
548
-
548
+
549
- 15/37 16/72 17/74 18/37 19/13 20/71 21/12 22/76 23/51 24/27 25/82 26/37 27/4 28/92 29/70
549
+ 15/25 16/63 17/95 18/48 19/74 20/57 21/54 22/83 23/65 24/39 25/22 26/73 27/97 28/2 29/97
550
550
 
551
551
 
552
552
 
553
553
  (id/cost)
554
554
 
555
- 8/100
555
+ 6/1
556
-
556
+
557
- 22/76 28/92
557
+ 15/25 28/2
558
-
558
+
559
- 17/74 20/71 25/82 2/81
559
+ 8/38 4/31 25/22 13/4
560
-
560
+
561
- 16/72 1/53 9/32 10/46 23/51 12/46 13/64 14/78
561
+ 3/52 18/48 20/57 21/54 24/39 12/44 0/29 14/30
562
-
562
+
563
- 15/37 7/20 3/13 18/37 19/13 0/6 21/12 4/17 11/4 24/27 5/33 26/37 27/4 6/38 29/70
563
+ 7/54 16/63 17/95 1/87 19/74 9/69 10/74 22/83 23/65 11/100 5/76 26/73 27/97 2/72 29/97
564
564
 
565
565
 
566
566