[백준 1753] 잘못된 다익스트라 코드

1. 글을 쓰게 된 이유

  • 2020 KCPC를 준비하면서 다익스트라 코드를 연습하고자 백준 9370 문제를 풀어보았다.
  • 문제는 내가 생각한 풀이 방법이 옳은 정답이었는데도 계속 틀린 코드가 나왔던 것
  • BAPC 문제였기 때문에 테스트 케이스를 홈페이지에서 구할 수 있었고, 코드를 수정해나가는 도중 이상한 TC를 발견하게 됨
  • 이 TC를 통해 사실은 그동안 내가 짜왔던 다익스트라 코드가 최단 경로를 제대로 발견하지 못하는 틀린 코드였다더라 그런 이야기!

2-1. 원래 코드

  • 내가 풀었던 백준 1753 소스코드를 수정한 것
  • 수정 사항
    • 전체출력 대신 d[238]만 출력하도록 변경
    • P[] 벡터의 자료형을 vector<pair<int,char>> 에서 vector<pair<int,int>>로 변경
    • 단방향 edge였던것을 양방향 edge로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>
#include <queue>
#define MaxNum 20001
#define INF 9999999
#define white 0
#define gray 1
#define black 2
using namespace std;
int d[MaxNum];
vector<pair<int, int>> P[MaxNum];
char visit[MaxNum];
typedef struct compare
{
    bool operator()(int i, int j)
    {
        return d[i] > d[j];
    }
} cmp;

priority_queue<int, vector<int>, cmp> pq;
int V = 0, E = 0, s = 0;
void Dijkstra(int s);
int MIN(int a, int b);

int main()
{
    // init
    for (int i = 0; i < MaxNum; i++)
    {
        d[i] = INF;
        visit[i] = white;
    }

    scanf("%d %d", &V, &E);
    scanf("%d", &s);

    // edge의 값들을 입력한다
    for (int e = 0; e < E; e++)
    {
        int x = 0, y = 0, d = 0;
        scanf("%d %d %d", &x, &y, &d);
        P[x].push_back(pair<int, int>(y, d));
        P[y].push_back(pair<int, int>(x, d));
    }
    Dijkstra(s);

    // 결과 출력

    printf("%d", d[238]);
}

int MIN(int a, int b)
{
    if (a > b)
        return b;
    else
        return a;
}
void Dijkstra(int s)
{
    // s = starting vertex
    visit[s] = gray;
    d[s] = 0;
    pq.push(s);
    while (!pq.empty())
    {
        // pop
        int x = pq.top();
        pq.pop();
        // 이미 방문한 노드는 건너뛴다
        if (visit[x] == black)
            continue;
        // process : 인접노드들의 최단 경로를 업데이트한다.
        for (int y = 0; y < P[x].size(); y++)
        {
            int dest = P[x][y].first;
            if (visit[dest] != black)
            {
                d[dest] = MIN(d[dest], d[x] + P[x][y].second);
                // 경로가 업데이트된 노드들은 큐에 넣어준다.
                pq.push(dest);
                visit[dest] = gray;
            }
        }
        // 방문 처리
        visit[x] = black;

    }
}

2-2. 원래 코드의 문제점

  • 내가 원래 짰던 코드는 다음과 같이 우선순위큐가 ‘최단거리 저장 배열’에 직접 접근해서 (이 코드에서는 d[])
  • 이 최단거리를 기준으로 Sorting을 수행했었다
1
2
3
4
5
6
7
typedef struct compare
{
    bool operator()(int i, int j)
    {
        return d[i] > d[j];
    }
} cmp;
  • 이 코드대로 아래 TC를 수행하면 d[238]의 값이 1026으로 출력된다
  • 정답은 965
TC 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
417 1767
188
36 67 939
21 279 459
119 283 105
153 294 671
161 381 800
57 416 754
52 253 958
147 358 914
116 130 992
85 105 688
93 270 522
264 351 151
54 205 350
196 388 348
92 277 914
359 362 454
223 290 704
54 236 744
31 227 347
184 186 395
186 404 800
240 324 360
146 363 127
175 359 309
37 177 368
24 151 598
137 152 477
204 298 217
360 370 777
38 294 724
208 355 545
67 283 915
253 399 920
54 243 253
49 277 158
176 281 191
126 335 518
211 273 783
313 404 683
191 244 572
77 285 992
256 401 881
65 410 497
116 198 859
261 322 908
217 344 263
225 339 601
144 245 552
156 360 720
265 301 488
182 273 378
167 242 548
75 102 532
149 357 337
47 380 647
101 298 554
328 337 633
54 265 220
116 323 876
86 210 345
135 411 314
254 411 464
138 194 446
33 212 272
282 330 578
251 265 608
64 207 522
65 402 249
135 266 165
135 187 765
21 32 280
31 85 612
46 108 940
145 274 638
25 61 886
146 278 649
254 295 495
38 397 387
312 366 670
43 258 317
144 396 753
253 413 682
114 305 863
61 105 497
232 234 114
87 382 668
125 350 304
71 91 837
134 404 105
70 347 815
35 154 187
11 152 564
108 404 681
45 106 122
3 332 426
142 268 468
16 119 217
191 304 594
45 277 806
52 318 276
267 299 454
154 176 1
175 314 487
132 332 218
369 398 801
225 238 898
57 297 708
160 380 686
125 319 295
119 302 299
68 175 370
133 227 885
82 152 762
240 378 486
79 131 802
57 310 694
228 292 310
219 406 466
5 267 860
95 272 685
177 397 387
351 379 846
29 129 290
206 218 438
334 338 535
127 232 660
152 371 127
59 125 493
68 190 679
84 177 594
219 397 457
249 275 109
62 116 433
111 201 145
14 229 360
94 119 485
225 382 578
95 396 791
61 349 637
141 165 483
91 145 733
70 159 659
73 393 951
284 312 936
43 318 826
23 189 950
162 370 575
51 346 306
8 251 949
273 398 704
171 187 738
14 348 318
310 407 483
23 301 511
42 160 271
239 301 665
117 346 575
16 388 377
1 253 706
2 39 952
214 385 139
24 115 853
77 307 578
67 313 407
20 323 578
54 372 549
319 366 373
42 292 273
133 134 169
259 337 779
153 185 753
151 178 292
138 343 416
343 390 790
205 290 165
26 383 399
165 302 557
311 317 383
56 328 164
193 390 115
205 240 245
30 309 883
16 62 369
18 341 829
224 250 722
230 319 818
344 413 557
71 139 938
6 274 193
153 226 971
104 344 251
80 369 755
99 137 861
90 236 490
58 366 599
171 372 604
148 397 137
5 145 914
87 293 376
173 320 625
189 267 462
29 65 345
21 299 718
235 256 176
289 329 837
324 384 548
46 288 181
145 279 177
161 288 743
181 214 688
301 347 861
120 414 101
37 346 596
35 53 392
244 388 374
136 221 275
38 319 473
193 384 4
151 416 396
47 342 716
142 166 718
158 366 481
128 134 768
147 165 443
129 414 841
246 416 183
5 139 785
135 240 765
89 232 421
142 189 877
21 165 297
206 267 487
272 275 586
279 286 446
229 251 367
135 172 262
117 199 546
245 312 852
26 176 955
88 267 111
55 223 917
154 193 446
30 124 373
133 160 639
71 392 594
263 354 692
154 315 242
96 368 777
338 355 652
48 325 736
25 254 300
99 123 556
34 240 570
128 380 164
47 294 801
64 227 873
142 354 680
85 103 885
272 376 323
278 374 291
379 393 641
148 163 430
123 164 406
119 365 362
93 176 634
125 308 327
27 248 136
67 186 264
348 412 331
49 146 463
349 382 557
182 384 829
173 195 535
127 203 457
16 371 259
268 415 455
194 243 445
120 192 271
236 329 846
104 379 771
265 296 997
66 322 378
337 347 403
80 315 684
70 348 228
66 81 472
289 385 397
45 373 594
138 353 106
209 296 590
179 390 208
59 71 239
293 345 943
23 360 328
217 302 504
96 386 287
141 382 469
38 141 780
8 187 298
135 236 598
112 290 133
378 397 194
211 361 155
198 268 448
40 201 107
254 374 266
57 328 504
25 87 347
35 365 227
40 105 779
102 170 388
81 292 179
74 339 686
296 364 835
251 393 925
188 245 287
46 176 493
201 227 170
81 306 806
213 346 792
26 27 954
226 337 629
205 364 179
59 123 251
45 173 348
169 244 800
65 149 517
44 235 378
257 336 700
165 294 350
325 383 961
335 383 648
160 314 839
30 252 305
150 371 440
29 372 123
362 371 452
45 240 347
173 253 378
273 302 731
91 214 234
303 319 503
264 310 489
8 72 550
326 396 1000
251 390 362
113 273 709
137 341 633
173 257 814
367 383 544
14 179 472
6 392 664
121 162 555
151 347 612
31 334 190
133 276 354
201 316 423
36 278 201
222 388 398
20 239 881
111 163 415
21 250 254
193 385 1
214 370 157
93 248 952
40 325 506
156 257 339
319 330 292
92 354 915
238 359 640
170 413 368
45 213 593
260 262 981
14 190 468
5 374 256
30 393 276
247 274 586
194 379 460
117 277 923
52 218 904
47 231 321
116 236 853
41 51 149
87 229 953
327 375 860
195 198 313
124 199 367
189 368 196
125 344 814
101 238 818
83 302 850
59 129 504
34 174 726
286 415 948
218 262 784
29 94 884
20 384 732
160 216 295
112 222 231
181 254 994
64 189 207
116 128 425
168 212 167
1 157 448
286 326 966
132 235 664
245 341 265
144 409 890
59 105 301
334 381 670
105 179 894
70 303 378
241 247 330
23 383 684
60 160 326
5 13 397
149 347 290
75 238 701
142 220 520
27 346 469
292 297 736
408 416 709
96 277 314
199 272 898
259 379 120
60 142 995
261 294 101
243 311 800
181 291 817
148 191 748
8 230 409
131 132 782
130 297 851
37 287 961
235 262 745
12 131 504
93 151 294
135 209 145
84 308 916
7 123 602
8 364 774
85 138 816
88 159 106
49 166 401
264 341 771
35 242 991
205 299 286
103 222 464
225 304 971
75 314 691
145 236 822
370 402 733
297 381 861
116 372 412
154 264 775
308 329 387
56 102 756
122 189 497
213 296 675
124 293 440
72 359 874
110 385 135
200 282 841
37 187 236
34 276 527
170 184 158
73 104 832
248 408 690
30 270 990
88 276 827
140 278 435
61 83 385
244 354 876
53 81 651
18 221 345
242 388 885
51 248 743
112 118 929
259 352 983
47 157 833
216 280 105
109 150 400
101 170 589
33 376 634
114 194 537
159 411 176
173 243 639
190 361 939
353 391 365
158 170 345
99 393 336
5 137 113
246 365 712
150 365 691
246 409 934
189 211 646
26 164 678
202 318 200
177 222 853
90 109 281
350 416 886
162 299 678
119 178 573
340 393 106
162 303 719
79 182 542
345 397 772
53 333 524
316 403 633
116 212 731
35 280 352
114 121 496
53 220 827
59 95 612
321 387 638
278 364 919
294 396 649
188 270 888
105 289 244
166 292 242
43 219 947
34 84 260
179 416 442
206 379 195
151 166 539
61 375 905
111 347 413
75 240 370
218 366 988
178 347 794
289 402 857
286 386 360
185 376 724
92 338 497
221 233 130
60 374 442
11 200 614
140 269 758
1 202 111
122 349 833
105 211 638
224 319 561
129 173 569
96 236 827
251 277 376
54 297 683
17 158 379
195 291 580
12 44 298
15 251 891
187 281 510
49 206 765
56 60 765
278 333 871
77 291 169
290 301 711
51 85 680
293 353 111
220 330 472
187 323 731
26 163 805
67 361 106
218 231 330
122 260 910
131 173 168
98 204 540
16 237 961
212 326 405
120 247 679
94 388 690
128 131 176
1 163 694
187 401 177
309 359 379
351 397 291
48 131 883
50 394 574
53 183 161
176 275 3
11 160 917
26 251 853
83 369 879
29 196 533
131 157 114
301 391 804
55 198 286
31 101 786
58 245 917
70 336 548
44 144 459
27 150 993
46 313 173
133 369 435
88 167 176
378 412 192
272 331 570
347 415 354
189 400 189
32 235 276
45 157 576
24 254 808
228 375 356
326 347 910
32 230 131
237 254 893
37 320 975
148 323 654
223 289 498
193 284 365
128 294 823
366 393 909
27 95 911
168 287 425
200 216 941
141 294 926
94 160 121
235 355 985
56 224 170
283 411 848
48 375 802
50 125 936
178 194 610
102 361 531
327 356 424
43 353 126
37 275 414
120 189 922
63 334 193
43 125 855
31 291 507
203 397 146
47 398 272
285 399 923
72 312 604
144 281 770
273 405 532
16 407 376
84 255 703
355 359 586
95 133 528
54 122 999
1 314 997
294 327 681
61 248 697
16 154 646
27 63 888
142 346 349
61 390 660
181 292 677
259 313 422
91 289 445
48 177 223
223 230 388
129 394 615
286 310 839
190 338 175
45 183 598
200 224 163
143 284 366
167 399 334
156 225 738
7 332 257
1 190 454
128 253 602
125 338 420
26 313 736
248 291 376
261 327 731
42 399 631
183 390 563
112 154 938
57 194 851
68 301 553
150 155 540
207 412 776
114 144 656
71 404 851
61 109 376
47 243 219
57 305 168
164 415 512
207 360 788
100 352 878
150 255 557
49 75 177
108 389 962
77 406 541
92 347 956
212 363 344
243 267 418
248 257 518
53 286 327
187 365 468
87 359 576
273 403 767
51 278 691
292 343 671
101 188 995
112 248 946
92 116 900
214 317 357
100 194 785
17 274 389
175 252 770
178 309 189
167 269 796
111 327 747
147 219 536
88 183 315
175 225 298
45 194 401
121 122 251
341 352 160
110 298 716
115 324 375
351 392 933
18 22 620
25 351 756
70 297 465
253 393 235
161 374 351
207 403 994
317 358 121
81 85 726
306 314 795
123 269 496
81 413 782
162 193 257
128 331 957
71 288 135
57 101 227
103 200 680
12 105 308
3 23 815
129 131 936
37 53 562
49 165 496
24 394 788
221 343 208
327 381 544
67 233 114
72 238 182
151 388 829
12 195 657
73 363 917
73 414 247
27 372 857
75 160 689
226 288 172
54 81 909
65 356 987
119 246 329
307 399 377
2 82 713
83 188 484
179 242 952
102 114 984
295 398 737
286 382 4
54 300 686
29 170 826
69 95 433
70 197 187
98 142 681
42 268 706
103 175 416
130 133 623
68 277 160
241 267 860
49 50 915
106 176 691
60 257 493
31 284 417
58 121 119
174 260 488
296 409 827
252 365 829
141 369 236
104 399 580
71 381 387
183 349 823
278 292 852
237 357 686
231 397 567
137 148 707
1 7 703
231 303 138
218 275 228
89 294 884
176 371 201
118 173 831
142 252 571
162 217 340
13 332 869
295 414 889
71 303 676
122 357 270
107 162 919
27 138 293
314 368 678
152 318 823
7 169 524
179 185 587
338 417 354
33 256 368
1 75 645
31 52 123
80 312 512
106 377 396
241 337 181
330 349 655
81 114 244
153 165 737
368 387 135
184 191 557
354 364 821
122 267 720
16 111 348
107 401 900
296 379 881
335 397 686
132 277 526
116 395 914
33 232 126
107 172 499
28 40 108
102 356 674
89 333 352
223 224 445
217 278 838
191 410 180
27 115 844
148 270 442
34 313 591
186 266 236
339 389 815
53 337 847
114 337 144
11 87 756
231 323 306
205 355 451
40 70 431
141 245 721
11 204 543
54 301 245
104 128 541
389 415 780
277 408 285
268 361 360
120 288 952
328 382 697
94 96 537
125 243 681
186 380 658
19 272 999
13 48 687
230 384 932
256 338 764
186 246 519
287 326 149
10 408 856
182 381 440
293 413 735
46 121 939
225 276 560
166 326 624
96 124 245
23 264 550
57 283 827
174 376 615
27 417 845
95 209 992
181 200 736
110 115 288
147 162 450
292 404 539
229 391 148
304 317 239
191 278 790
41 262 273
123 275 415
35 44 227
20 56 955
86 128 208
309 405 468
51 202 980
3 79 817
205 354 982
269 289 794
11 355 966
66 258 520
217 272 907
92 107 250
88 290 571
41 254 932
263 273 627
38 125 755
242 283 146
180 188 601
203 296 303
6 371 935
63 236 671
198 258 615
31 67 738
62 348 318
31 311 753
13 200 470
367 408 412
185 308 305
319 372 532
7 271 483
135 325 552
72 225 593
11 182 912
167 258 477
88 249 348
94 167 273
9 388 125
78 110 888
253 360 945
198 362 752
163 257 209
25 391 362
7 141 902
49 246 771
138 205 563
133 231 194
194 411 869
42 100 346
348 355 479
56 187 811
86 309 646
42 285 481
340 387 530
79 387 282
32 204 681
65 211 558
116 161 183
71 319 550
84 94 833
307 357 584
132 254 754
129 145 342
138 253 790
275 393 5
17 141 302
353 375 849
272 295 610
194 256 153
138 236 700
187 291 148
256 313 388
367 406 947
229 280 316
288 303 751
56 192 976
77 87 682
30 310 491
153 179 613
233 287 248
307 313 355
30 187 899
140 230 301
24 328 179
158 302 452
166 416 680
168 273 574
29 117 852
253 260 686
171 205 331
367 374 185
90 202 382
196 295 375
152 350 331
88 136 817
31 327 467
107 252 388
140 298 521
66 336 761
102 220 560
39 78 264
130 250 386
334 356 192
130 186 139
376 415 585
192 326 542
27 385 790
268 387 632
1 68 305
129 186 866
174 222 219
73 111 357
77 234 254
8 320 502
87 315 346
127 242 337
145 373 597
137 352 266
219 237 539
4 75 777
69 280 757
278 284 336
66 386 364
44 315 869
119 327 118
18 414 546
203 356 639
53 406 294
54 191 390
133 325 103
6 122 146
39 69 489
154 379 852
289 349 228
119 136 242
22 269 905
243 323 666
95 317 361
26 249 522
12 194 133
25 325 883
284 368 914
156 169 593
35 185 761
26 360 819
101 394 129
134 330 114
159 325 376
10 222 880
147 356 307
94 347 840
90 321 282
33 357 781
58 358 223
50 208 992
285 386 806
42 404 1000
57 339 513
380 395 301
63 214 361
94 162 453
128 312 252
311 384 747
122 367 273
6 396 349
29 369 351
53 382 808
252 357 911
3 39 286
31 50 134
132 269 241
244 401 973
42 322 665
334 388 696
67 134 650
158 271 183
289 334 277
289 350 343
266 277 147
40 65 939
272 396 562
8 306 968
32 199 266
132 303 104
187 250 735
216 347 497
239 264 253
135 323 666
372 373 891
76 182 780
12 73 508
198 297 754
142 156 994
58 281 183
75 397 764
52 320 726
97 384 167
318 412 617
83 350 887
166 320 878
115 407 304
282 307 328
78 299 862
104 182 534
104 181 295
55 288 177
10 118 282
40 402 770
113 162 153
88 278 302
142 384 905
230 283 930
45 237 518
6 120 335
250 298 920
339 400 143
132 365 501
185 203 642
72 327 129
8 415 284
169 240 646
346 410 638
187 219 737
124 269 257
3 209 770
42 287 876
160 390 788
220 233 244
178 404 921
61 166 593
102 253 141
40 131 498
373 413 387
18 94 752
62 371 505
176 267 811
117 274 427
19 379 599
72 170 971
68 141 966
260 354 856
50 416 538
90 347 181
17 95 464
28 64 861
175 393 839
24 186 352
193 361 251
55 390 920
371 385 803
79 367 359
198 250 393
156 371 767
190 272 820
349 386 476
358 377 561
8 214 544
145 342 380
339 405 112
232 331 961
104 201 101
118 414 828
217 231 933
120 375 126
65 155 932
54 309 383
136 300 703
65 98 270
122 308 812
294 328 287
146 211 537
132 407 434
266 299 182
240 286 310
108 342 583
152 259 874
188 230 536
169 380 323
286 291 825
71 254 929
124 391 743
12 369 125
225 321 164
63 139 991
49 402 243
141 173 105
57 169 500
22 33 618
295 315 627
11 172 554
109 264 797
61 361 626
44 49 916
85 119 134
29 383 762
49 115 525
129 211 465
151 293 591
95 124 293
186 195 399
179 264 226
134 345 159
15 384 277
163 189 295
103 145 682
347 353 568
166 189 175
17 333 494
13 254 326
36 93 294
61 158 625
82 94 382
99 344 625
259 318 511
3 187 221
104 391 963
116 194 480
6 51 509
2 34 226
384 399 787
80 171 878
225 408 587
102 401 917
303 357 496
151 161 960
73 196 880
207 331 771
52 273 591
134 194 238
13 276 215
8 85 395
377 384 621
267 405 957
130 158 141
154 326 565
102 192 322
269 284 177
72 362 168
49 217 931
18 301 5
80 93 162
232 245 329
12 140 166
86 158 433
139 141 823
82 138 899
274 318 997
11 401 940
170 171 880
13 370 548
183 257 450
3 196 873
320 379 245
191 194 224
107 204 718
59 398 286
110 320 343
235 378 895
87 188 1
125 361 537
115 352 986
171 307 167
51 186 930
43 158 275
250 360 662
193 401 711
297 314 748
19 236 351
149 361 347
70 262 597
120 292 244
7 221 928
1 283 579
70 143 646
133 255 165
149 154 500
20 329 737
21 402 367
161 364 149
41 174 326
94 305 510
188 201 673
112 261 237
14 274 213
144 359 624
241 275 188
330 406 786
110 158 837
361 388 198
46 408 746
217 402 102
179 246 968
381 416 179
13 351 307
89 272 181
7 357 641
81 381 851
2 405 396
299 358 814
295 380 410
197 304 103
139 366 449
246 318 532
29 249 648
61 335 139
126 168 379
52 189 744
17 90 928
42 227 249
121 381 991
104 134 690
288 379 911
206 304 120
320 342 248
99 149 266
286 385 5
121 250 989
33 39 455
141 330 198
5 12 759
28 65 924
18 87 4
39 311 281
322 380 744
147 375 116
80 219 652
261 399 214
113 352 999
34 126 175
70 329 675
35 142 129
64 161 103
291 379 601
243 361 839
19 219 117
79 294 721
49 219 903
10 251 338
188 211 110
82 131 479
25 62 422
63 300 761
94 336 676
81 408 518
33 61 291
276 351 516
149 375 943
2 333 367
88 233 206
54 74 955
206 385 916
165 205 283
93 173 218
219 244 686
81 310 771
31 150 673
5 231 125
170 345 615
195 288 364
56 88 706
295 342 618
178 317 728
143 304 376
8 316 117
187 339 464
311 411 885
28 406 803
96 377 668
212 380 293
151 300 795
53 269 806
17 318 252
118 376 731
76 138 414
189 283 775
34 187 760
97 391 941
299 362 657
85 412 992
291 344 687
29 44 551
107 276 836
263 348 582
157 352 562
139 384 3
2 61 616
196 263 232
81 405 925
62 92 296
153 305 377
157 193 455
21 123 888
141 262 882
36 185 303
60 404 188
149 297 185
201 374 160
20 205 730
69 372 592
93 375 837
58 279 255
219 359 950
146 345 416
89 180 571
26 342 946
338 351 950
11 52 748
87 378 273
71 191 797
40 175 963
14 401 543
177 205 424
26 55 190
105 323 651
137 300 165
47 216 803
59 145 774
59 107 488
62 150 520
49 242 910
162 221 133
181 250 643
216 227 881
88 404 780
131 300 273
34 102 876
37 193 232
287 306 831
65 199 705
391 413 412
176 388 280
12 288 904
112 327 447
166 337 805
138 192 339
18 294 184
188 315 635
80 177 809
161 317 894
180 374 191
237 262 376
73 292 474
27 186 340
231 263 205
8 325 464
30 173 582
6 257 761
65 192 753
131 383 748
77 347 439
219 290 503
115 219 373
192 400 329
337 409 386
233 328 212
378 402 337
4 402 471
247 322 332
65 323 127
147 222 596
38 166 674
97 105 950
109 190 303
297 315 844
74 95 146
189 403 463
126 254 508
155 344 114
21 151 420
127 309 202
130 197 476
73 215 484
253 290 466
66 319 853
200 276 329
72 315 497
252 256 762
206 302 980
67 319 343
159 329 428
303 316 193
230 326 392
36 395 954
5 244 880
12 405 101
26 196 654
252 277 195
36 234 122
281 303 892
306 358 262
128 202 675
114 326 263
365 407 515
103 214 386
215 302 960
310 317 300
97 322 643
82 128 691
175 417 117
240 275 609
129 371 263
171 409 398
82 377 425
95 279 544
77 266 467
58 328 518
87 304 908
176 185 709
235 315 660
320 336 725
82 88 760
221 385 130
21 255 117
236 407 944
53 244 547
369 395 515
52 255 700
23 167 889
212 227 740
86 236 176
182 417 500
12 100 479
13 130 510
22 204 366
222 274 160
4 148 777
283 319 189
215 399 591
77 188 827
29 261 329
364 391 991
21 350 669
5 377 196
47 399 763
249 256 893
4 151 688
195 224 372
112 172 710
332 351 213
319 396 416
137 231 296
291 411 948
20 357 429
237 288 763
159 378 708
105 256 246
22 252 170
30 79 638
358 368 911
19 231 996
199 207 677
180 223 385
60 121 428
37 340 477
261 302 240
101 269 224
181 311 527
58 349 522
258 311 785
157 227 414
155 268 532
26 237 263
95 401 915
125 138 770
120 153 871
237 405 529
12 317 550
128 361 478
187 367 153
149 322 160
87 153 655
168 405 936
316 373 322
216 328 534
236 241 698
265 354 777
131 273 362
135 167 420
170 202 111
160 404 188
26 42 107
135 275 369
288 339 907
48 161 342
255 347 584
75 391 332
329 399 935
48 111 435
351 402 343
81 373 634
75 399 334
109 178 503
169 313 196
20 175 161
199 303 148
72 163 164
35 254 900
155 384 944
260 292 359
141 282 968
159 409 179
62 173 807
293 379 322
220 291 627
174 341 473
126 166 147
278 390 181
176 225 991
140 215 774
84 379 837
123 125 787
98 227 564
120 358 657
15 163 934
4 214 693
10 180 288
154 269 927
260 261 462
230 281 400
117 313 122
227 394 227
130 278 370
34 254 965
88 288 514
6 163 172
39 227 623
143 414 895
233 347 835
123 230 821
295 386 829
100 269 751
155 219 442
154 361 623
307 387 535
150 410 616
50 334 704
229 288 827
164 228 847
201 360 345
11 360 854
200 414 593
265 320 519
77 297 669
156 192 240
177 216 663
187 226 366
334 387 916
298 321 799
335 387 313
107 215 364
197 208 673
283 386 860
82 153 189
68 173 888
301 382 4
248 280 149
73 290 792
4 22 387
7 34 159
103 327 998
169 191 145
155 360 487
278 362 841
219 395 947
35 69 867
119 195 228
51 321 168
23 415 310
28 119 893
98 309 615
273 289 142
106 238 741
107 258 837
33 384 193
246 264 919
121 171 443
89 112 234
49 116 287
39 87 408
46 341 577
202 409 367
33 369 389
150 340 758
161 314 108
4 385 936
109 369 833
116 397 938
160 173 385
15 408 473
93 310 338
155 323 385
309 339 522
93 272 411
113 414 381
314 379 971
10 289 212
251 280 553
90 265 764
204 206 679
198 254 991
124 149 760
85 349 219
81 152 113
64 196 724
107 274 587
70 232 645
91 267 721
139 393 4
4 187 816
39 268 969
2 282 668
124 213 184
24 221 310
49 194 781
34 96 225
125 353 235
47 75 483
188 249 483
296 310 936
334 401 190
165 335 562
321 345 535
13 109 653
250 355 898
23 289 819
7 35 672
57 392 410
33 317 856
45 367 755
192 286 414
78 204 411
42 110 351
203 363 831
22 25 957
327 409 770
277 315 607
3 90 271
40 388 887
8 416 689
94 375 293
330 371 281
318 323 239
70 101 284
49 376 338
153 385 727
215 232 982
192 206 386
189 266 125
21 197 333
2 382 674
40 214 724
48 313 103
209 249 493
132 360 685
67 379 397
260 374 443
52 208 507
56 263 680
133 398 907
273 316 660
242 376 482
368 379 570
341 407 950
231 270 814
118 296 606
28 86 626
118 172 820
141 394 524
64 214 531
88 101 713
174 238 968
200 327 279
172 356 449
314 332 822
129 158 901
158 240 873
184 230 349
282 414 545
98 300 881
91 298 517
178 252 333
105 192 580
352 367 652
86 184 187
223 229 748
50 81 889
58 376 278


3. 문제점 수정

  • 기존방법 :
    • priroriy queue에는 단순히 노드 번호만 삽입
    • 정렬 시에는 직접 d[]배열에 접근하여, 이 정보를 기준으로 정렬
  • 새 방법 :
    • priority queue에 (노드, 거리) 쌍을 삽입
    • 정렬시에는 (노드, 거리) 안의 두번째 인자 (거리 요소)를 사용하도록 수정
  • 수정한 코드 :
    • compare 함수
      • 변경 전/후 코드 비교
1
2
3
4
5
6
7
typedef struct compare
{
    bool operator()(int i, int j)
    {
        return d[i] > d[j];
    }
} cmp;
1
2
3
4
5
6
7
struct compare
{
    bool operator()(pair<int, int> a, pair<int, int> b)
    {
        return a.second > b.second;
    }
};
  • priority queue 자료형
    • 변경 전 : int
    • 변경 후 : pair<int,int>
  • 전체 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>
#include <queue>
#define MaxNum 20001
#define INF 9999999
#define white 0
#define gray 1
#define black 2
#define pii pair<int, int>
using namespace std;
int d[MaxNum];
vector<pair<int, int>> P[MaxNum];
char visit[MaxNum];
struct compare
{
    bool operator()(pair<int, int> a, pair<int, int> b)
    {
        return a.second > b.second;
    }
};
priority_queue<pii, vector<pii>, compare> pq;
int V = 0, E = 0, s = 0;
void Dijkstra(int s);
int MIN(int a, int b);

int main()
{
    // init
    for (int i = 0; i < MaxNum; i++)
    {
        d[i] = INF;
        visit[i] = white;
    }

    scanf("%d %d", &V, &E);
    scanf("%d", &s);

    // edge의 값들을 입력한다
    for (int e = 0; e < E; e++)
    {
        int x = 0, y = 0, d = 0;
        scanf("%d %d %d", &x, &y, &d);
        P[x].push_back(pair<int, int>(y, d));
        P[y].push_back(pair<int, int>(x, d));
    }
    Dijkstra(s);

    // 결과 출력

    printf("%d", d[238]);
}

int MIN(int a, int b)
{
    if (a > b)
        return b;
    else
        return a;
}
void Dijkstra(int s)
{
    // s = starting vertex
    visit[s] = gray;
    d[s] = 0;
    pq.push(make_pair(s, 0));
    while (!pq.empty())
    {
        // pop
        int x = pq.top().first;
        int value = pq.top().second;
        pq.pop();
        // 이미 방문한 노드는 건너뛴다
        if (visit[x] == black)
            continue;
        // process : 인접노드들의 최단 경로를 업데이트한다.
        for (int y = 0; y < P[x].size(); y++)
        {
            int dest = P[x][y].first;
            if (visit[dest] != black)
            {
                d[dest] = MIN(d[dest], d[x] + P[x][y].second);
                // 경로가 업데이트된 노드들은 큐에 넣어준다.
                // printf("Updating Dest : %d\n", dest);
                pq.push(make_pair(dest, d[dest]));
                visit[dest] = gray;
            }
        }
        // 방문 처리
        visit[x] = black;
    }
}
  • 이 코드 또한
    • Line 46 주석 처리
    • 모든 최단거리 출력 처리
  • 하고 백준 1753에 제출하면 맞았습니다를 얻을 수 있다.

4. 깨달은 점

  • 다익스트라를 구현할 때에는 저렇게 d[]에 직접 접근해서 priority queue를 정렬하는 방식을 쓰면 안된다
  • 왜인지 모르지만 에러가 난다
  • 에러가 나는 원인은 아직 잘 모르겠다
    • 내 생각에는 d[] 배열 직접 접근도 문제 없는 알고리즘인 것 같은데 음
    • 분석하고 싶은데 TC가 너무 길어서 분석할 엄두가 안난다
  • 저 TC는 양방향 edge로 수정해서 1753에 데이터 추가해달라고 요청할 예정