Init
This commit is contained in:
commit
da533a1f91
12
.gitignore
vendored
Executable file
12
.gitignore
vendored
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
*~
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
*.pro.user.*
|
||||||
|
*.pro.user
|
||||||
|
|
||||||
|
build-*/
|
||||||
|
*.app
|
||||||
|
*.exe
|
||||||
|
|
||||||
|
build
|
40
TSP.pro
Executable file
40
TSP.pro
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
QT += widgets
|
||||||
|
SOURCES = $$PWD/src/*.cpp
|
||||||
|
#SOURCES += $$PWD/lib/*.cpp
|
||||||
|
HEADERS = $$PWD/src/*.h
|
||||||
|
#HEADERS += $$PWD/lib/*.h
|
||||||
|
|
||||||
|
QMAKE_CXXFLAGS += -std=c++11
|
||||||
|
|
||||||
|
INCLUDEPATH += $$PWD/lib/
|
||||||
|
|
||||||
|
# Copies the given files to the destination directory
|
||||||
|
defineTest(copyToDestdir) {
|
||||||
|
files = $$1
|
||||||
|
|
||||||
|
for(FILE, files) {
|
||||||
|
DDIR = $$OUT_PWD
|
||||||
|
|
||||||
|
# Replace slashes in paths with backslashes for Windows
|
||||||
|
win32:FILE ~= s,/,\\,g
|
||||||
|
win32:DDIR ~= s,/,\\,g
|
||||||
|
|
||||||
|
!win32 {
|
||||||
|
QMAKE_POST_LINK += cp -r '"'$$FILE'"' '"'$$DDIR'"' $$escape_expand(\\n\\t)
|
||||||
|
}
|
||||||
|
win32 {
|
||||||
|
QMAKE_POST_LINK += xcopy '"'$$FILE'"' '"'$$DDIR'"' /e /y $$escape_expand(\\n\\t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export(QMAKE_POST_LINK)
|
||||||
|
}
|
||||||
|
!win32 {
|
||||||
|
copyToDestdir($$files($$PWD/res/*))
|
||||||
|
}
|
||||||
|
win32 {
|
||||||
|
copyToDestdir($$PWD/res)
|
||||||
|
}
|
||||||
|
macx {
|
||||||
|
cache()
|
||||||
|
}
|
128
res/bier127.txt
Executable file
128
res/bier127.txt
Executable file
@ -0,0 +1,128 @@
|
|||||||
|
573 600
|
||||||
|
365.1020 357.2109
|
||||||
|
278.2993 380.8844
|
||||||
|
270.4082 341.4286
|
||||||
|
163.8776 254.6259
|
||||||
|
317.7551 384.8299
|
||||||
|
230.9524 408.5034
|
||||||
|
447.9592 301.9728
|
||||||
|
380.8844 447.9592
|
||||||
|
242.7891 483.4694
|
||||||
|
294.0816 432.1769
|
||||||
|
254.6259 278.2993
|
||||||
|
471.6327 590.0000
|
||||||
|
337.4830 380.8844
|
||||||
|
515.0340 270.4082
|
||||||
|
333.5374 301.9728
|
||||||
|
376.9388 574.2177
|
||||||
|
294.0816 357.2109
|
||||||
|
262.5170 428.2313
|
||||||
|
384.8299 286.1905
|
||||||
|
305.9184 357.2109
|
||||||
|
175.7143 353.2653
|
||||||
|
365.1020 440.0680
|
||||||
|
369.0476 321.7007
|
||||||
|
286.1905 369.0476
|
||||||
|
511.0884 337.4830
|
||||||
|
163.8776 546.5986
|
||||||
|
254.6259 337.4830
|
||||||
|
10.0000 116.5306
|
||||||
|
329.5918 420.3401
|
||||||
|
542.6531 463.7415
|
||||||
|
203.3333 487.4150
|
||||||
|
345.3741 372.9932
|
||||||
|
384.8299 499.2517
|
||||||
|
250.6803 487.4150
|
||||||
|
404.5578 357.2109
|
||||||
|
447.9592 274.3537
|
||||||
|
313.8095 455.8503
|
||||||
|
515.0340 290.1361
|
||||||
|
305.9184 440.0680
|
||||||
|
155.9864 400.6122
|
||||||
|
195.4422 554.4898
|
||||||
|
349.3197 365.1020
|
||||||
|
305.9184 495.3061
|
||||||
|
447.9592 499.2517
|
||||||
|
266.4626 254.6259
|
||||||
|
329.5918 392.7211
|
||||||
|
534.7619 187.5510
|
||||||
|
396.6667 432.1769
|
||||||
|
361.1565 365.1020
|
||||||
|
361.1565 278.2993
|
||||||
|
349.3197 372.9932
|
||||||
|
313.8095 10.0000
|
||||||
|
365.1020 380.8844
|
||||||
|
266.4626 266.4626
|
||||||
|
372.9932 191.4966
|
||||||
|
92.8571 384.8299
|
||||||
|
294.0816 447.9592
|
||||||
|
562.3810 298.0272
|
||||||
|
345.3741 384.8299
|
||||||
|
270.4082 321.7007
|
||||||
|
372.9932 234.8980
|
||||||
|
357.2109 250.6803
|
||||||
|
262.5170 365.1020
|
||||||
|
278.2993 424.2857
|
||||||
|
412.4490 262.5170
|
||||||
|
451.9048 542.6531
|
||||||
|
313.8095 420.3401
|
||||||
|
341.4286 369.0476
|
||||||
|
372.9932 159.9320
|
||||||
|
357.2109 357.2109
|
||||||
|
558.4354 317.7551
|
||||||
|
372.9932 227.0068
|
||||||
|
262.5170 278.2993
|
||||||
|
325.6463 412.4490
|
||||||
|
396.6667 408.5034
|
||||||
|
365.1020 408.5034
|
||||||
|
372.9932 353.2653
|
||||||
|
234.8980 499.2517
|
||||||
|
305.9184 325.6463
|
||||||
|
424.2857 412.4490
|
||||||
|
400.6122 424.2857
|
||||||
|
369.0476 333.5374
|
||||||
|
270.4082 282.2449
|
||||||
|
357.2109 349.3197
|
||||||
|
357.2109 369.0476
|
||||||
|
463.7415 546.5986
|
||||||
|
246.7347 278.2993
|
||||||
|
266.4626 483.4694
|
||||||
|
266.4626 333.5374
|
||||||
|
238.8435 475.5782
|
||||||
|
317.7551 349.3197
|
||||||
|
250.6803 479.5238
|
||||||
|
21.8367 534.7619
|
||||||
|
353.2653 21.8367
|
||||||
|
313.8095 329.5918
|
||||||
|
558.4354 305.9184
|
||||||
|
562.3810 313.8095
|
||||||
|
345.3741 416.3946
|
||||||
|
392.7211 412.4490
|
||||||
|
341.4286 309.8639
|
||||||
|
294.0816 341.4286
|
||||||
|
301.9728 400.6122
|
||||||
|
420.3401 317.7551
|
||||||
|
345.3741 357.2109
|
||||||
|
361.1565 384.8299
|
||||||
|
357.2109 361.1565
|
||||||
|
294.0816 412.4490
|
||||||
|
175.7143 309.8639
|
||||||
|
408.5034 420.3401
|
||||||
|
286.1905 313.8095
|
||||||
|
404.5578 412.4490
|
||||||
|
503.1973 128.3673
|
||||||
|
353.2653 349.3197
|
||||||
|
400.6122 337.4830
|
||||||
|
357.2109 155.9864
|
||||||
|
447.9592 329.5918
|
||||||
|
238.8435 416.3946
|
||||||
|
305.9184 463.7415
|
||||||
|
246.7347 404.5578
|
||||||
|
333.5374 499.2517
|
||||||
|
337.4830 404.5578
|
||||||
|
392.7211 329.5918
|
||||||
|
290.1361 372.9932
|
||||||
|
376.9388 361.1565
|
||||||
|
274.3537 349.3197
|
||||||
|
380.8844 451.9048
|
||||||
|
309.8639 380.8844
|
1291
res/circuit1290.txt
Executable file
1291
res/circuit1290.txt
Executable file
File diff suppressed because it is too large
Load Diff
15113
res/germany15112.txt
Executable file
15113
res/germany15112.txt
Executable file
File diff suppressed because it is too large
Load Diff
100002
res/mona-100k.txt
Executable file
100002
res/mona-100k.txt
Executable file
File diff suppressed because it is too large
Load Diff
20001
res/mona-20k.txt
Executable file
20001
res/mona-20k.txt
Executable file
File diff suppressed because it is too large
Load Diff
50001
res/mona-50k.txt
Executable file
50001
res/mona-50k.txt
Executable file
File diff suppressed because it is too large
Load Diff
6
res/tsp0.txt
Executable file
6
res/tsp0.txt
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
500 500
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
6
res/tsp1.txt
Executable file
6
res/tsp1.txt
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
500 500
|
||||||
|
200 400
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
77
res/tsp10-nearest.ans
Executable file
77
res/tsp10-nearest.ans
Executable file
@ -0,0 +1,77 @@
|
|||||||
|
This file shows the tour after each point is inserted.
|
||||||
|
It may be useful for debugging.
|
||||||
|
|
||||||
|
Tour distance = 0.0
|
||||||
|
(110.0, 225.0)
|
||||||
|
|
||||||
|
Tour distance = 150.0133327407934
|
||||||
|
(110.0, 225.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
|
||||||
|
Tour distance = 787.358844018307
|
||||||
|
(110.0, 225.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
|
||||||
|
Tour distance = 1094.6173929810654
|
||||||
|
(110.0, 225.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
|
||||||
|
Tour distance = 1139.6938059391582
|
||||||
|
(110.0, 225.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
|
||||||
|
Tour distance = 1259.6276840705505
|
||||||
|
(110.0, 225.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
|
||||||
|
Tour distance = 1313.038203492536
|
||||||
|
(110.0, 225.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(397.0, 566.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
|
||||||
|
Tour distance = 1357.8298213289954
|
||||||
|
(110.0, 225.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(306.0, 360.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(397.0, 566.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
|
||||||
|
Tour distance = 1461.504290888965
|
||||||
|
(110.0, 225.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(306.0, 360.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(397.0, 566.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
(343.0, 110.0)
|
||||||
|
|
||||||
|
Tour distance = 1566.1363051360363
|
||||||
|
(110.0, 225.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(306.0, 360.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(397.0, 566.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
(552.0, 199.0)
|
||||||
|
(343.0, 110.0)
|
11
res/tsp10-optimal.ans
Executable file
11
res/tsp10-optimal.ans
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
Distance = 1552.9612081934351
|
||||||
|
(343.0, 110.0)
|
||||||
|
(552.0, 199.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
(306.0, 360.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(397.0, 566.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
(110.0, 225.0)
|
77
res/tsp10-smallest.ans
Executable file
77
res/tsp10-smallest.ans
Executable file
@ -0,0 +1,77 @@
|
|||||||
|
This file shows the tour after each point is inserted.
|
||||||
|
It may be useful for debugging.
|
||||||
|
|
||||||
|
Tour distance = 0.0
|
||||||
|
(110.0, 225.0)
|
||||||
|
|
||||||
|
Tour distance = 150.0133327407934
|
||||||
|
(110.0, 225.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
|
||||||
|
Tour distance = 787.358844018307
|
||||||
|
(110.0, 225.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
|
||||||
|
Tour distance = 1094.6173929810654
|
||||||
|
(110.0, 225.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
|
||||||
|
Tour distance = 1139.6938059391582
|
||||||
|
(110.0, 225.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
|
||||||
|
Tour distance = 1213.9433802328422
|
||||||
|
(110.0, 225.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
|
||||||
|
Tour distance = 1267.3538996548277
|
||||||
|
(110.0, 225.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
(397.0, 566.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
|
||||||
|
Tour distance = 1268.541678478853
|
||||||
|
(110.0, 225.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(306.0, 360.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
(397.0, 566.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
|
||||||
|
Tour distance = 1551.1141715191152
|
||||||
|
(110.0, 225.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(306.0, 360.0)
|
||||||
|
(343.0, 110.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
(397.0, 566.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(161.0, 280.0)
|
||||||
|
|
||||||
|
Tour distance = 1655.7461857661865
|
||||||
|
(110.0, 225.0)
|
||||||
|
(283.0, 379.0)
|
||||||
|
(306.0, 360.0)
|
||||||
|
(343.0, 110.0)
|
||||||
|
(552.0, 199.0)
|
||||||
|
(490.0, 285.0)
|
||||||
|
(397.0, 566.0)
|
||||||
|
(325.0, 554.0)
|
||||||
|
(157.0, 443.0)
|
||||||
|
(161.0, 280.0)
|
11
res/tsp10.txt
Executable file
11
res/tsp10.txt
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
600 600
|
||||||
|
110.0 225.0
|
||||||
|
161.0 280.0
|
||||||
|
325.0 554.0
|
||||||
|
490.0 285.0
|
||||||
|
157.0 443.0
|
||||||
|
283.0 379.0
|
||||||
|
397.0 566.0
|
||||||
|
306.0 360.0
|
||||||
|
343.0 110.0
|
||||||
|
552.0 199.0
|
101
res/tsp100.txt
Executable file
101
res/tsp100.txt
Executable file
@ -0,0 +1,101 @@
|
|||||||
|
600 600
|
||||||
|
273.1588 72.6027
|
||||||
|
423.7493 428.0372
|
||||||
|
509.4693 426.8362
|
||||||
|
512.0536 520.2136
|
||||||
|
112.1935 453.8568
|
||||||
|
54.4830 231.6509
|
||||||
|
266.2236 220.0501
|
||||||
|
168.0002 365.8709
|
||||||
|
180.0541 359.8832
|
||||||
|
87.0681 286.3926
|
||||||
|
315.6692 103.6946
|
||||||
|
457.7327 520.4371
|
||||||
|
221.3036 324.1944
|
||||||
|
464.6742 403.1801
|
||||||
|
549.3704 134.9750
|
||||||
|
10.0000 346.6937
|
||||||
|
152.5254 450.5733
|
||||||
|
257.7839 341.6199
|
||||||
|
354.1409 149.3780
|
||||||
|
371.5071 590.0000
|
||||||
|
430.2164 347.7012
|
||||||
|
428.4436 526.3642
|
||||||
|
384.8782 133.7609
|
||||||
|
246.6101 409.2352
|
||||||
|
53.7277 276.0534
|
||||||
|
51.3431 442.4751
|
||||||
|
138.0119 393.6293
|
||||||
|
427.1514 411.3751
|
||||||
|
589.0593 215.0038
|
||||||
|
493.3952 289.8690
|
||||||
|
438.2191 334.2714
|
||||||
|
392.4814 357.9693
|
||||||
|
58.8089 181.2302
|
||||||
|
311.7615 353.9954
|
||||||
|
165.5282 248.1620
|
||||||
|
130.9518 202.2638
|
||||||
|
261.5480 383.9406
|
||||||
|
165.5969 315.6168
|
||||||
|
595.9071 303.7975
|
||||||
|
507.6590 368.8210
|
||||||
|
56.6928 367.5756
|
||||||
|
394.4477 513.8520
|
||||||
|
188.3190 445.5601
|
||||||
|
211.9338 223.0796
|
||||||
|
513.5830 234.8127
|
||||||
|
256.7040 513.9357
|
||||||
|
195.8223 110.9538
|
||||||
|
379.3163 268.0682
|
||||||
|
419.0551 230.5192
|
||||||
|
382.4749 174.4978
|
||||||
|
523.4022 491.6742
|
||||||
|
171.4522 31.8651
|
||||||
|
168.9303 293.8379
|
||||||
|
97.2369 149.8287
|
||||||
|
24.3200 366.1980
|
||||||
|
58.4656 232.0548
|
||||||
|
147.4940 473.6869
|
||||||
|
458.7439 267.5501
|
||||||
|
276.8106 51.5341
|
||||||
|
330.1640 499.7318
|
||||||
|
516.7853 226.8680
|
||||||
|
534.9506 337.7491
|
||||||
|
186.7959 494.8372
|
||||||
|
297.4665 259.6835
|
||||||
|
339.0843 125.1764
|
||||||
|
456.5466 279.3881
|
||||||
|
301.4429 341.7011
|
||||||
|
241.7536 551.8405
|
||||||
|
504.5441 194.1188
|
||||||
|
300.6439 163.8465
|
||||||
|
559.7077 243.4871
|
||||||
|
542.6786 164.3521
|
||||||
|
99.5465 367.5969
|
||||||
|
404.9224 278.8069
|
||||||
|
195.4291 96.0121
|
||||||
|
361.0886 415.9177
|
||||||
|
233.4325 74.1015
|
||||||
|
343.2292 338.0936
|
||||||
|
484.3626 122.6139
|
||||||
|
81.8307 430.1109
|
||||||
|
40.6437 429.6571
|
||||||
|
266.8353 10.0000
|
||||||
|
86.7809 336.4725
|
||||||
|
468.0013 344.5027
|
||||||
|
171.3398 542.6068
|
||||||
|
578.7719 403.2444
|
||||||
|
539.0705 180.1515
|
||||||
|
335.8320 362.5449
|
||||||
|
416.6955 512.8015
|
||||||
|
313.8028 257.0729
|
||||||
|
322.4235 295.7811
|
||||||
|
233.9381 419.6163
|
||||||
|
260.6304 462.8601
|
||||||
|
49.2269 445.3535
|
||||||
|
208.4506 270.0458
|
||||||
|
466.2847 260.2540
|
||||||
|
575.2262 269.1700
|
||||||
|
349.3280 109.7422
|
||||||
|
543.8085 328.3337
|
||||||
|
396.3891 185.0917
|
1001
res/tsp1000.txt
Executable file
1001
res/tsp1000.txt
Executable file
File diff suppressed because it is too large
Load Diff
6
res/tsp2.txt
Executable file
6
res/tsp2.txt
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
500 500
|
||||||
|
200 400
|
||||||
|
300 100
|
||||||
|
|
||||||
|
|
||||||
|
|
6
res/tsp3.txt
Executable file
6
res/tsp3.txt
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
500 500
|
||||||
|
200 400
|
||||||
|
300 100
|
||||||
|
100 100
|
||||||
|
|
||||||
|
|
6
res/tsp4.txt
Executable file
6
res/tsp4.txt
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
500 500
|
||||||
|
200 400
|
||||||
|
300 100
|
||||||
|
100 100
|
||||||
|
300 200
|
||||||
|
|
6
res/tsp5.txt
Executable file
6
res/tsp5.txt
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
600 600
|
||||||
|
0 300
|
||||||
|
600 300
|
||||||
|
300 600
|
||||||
|
300 0
|
||||||
|
0 600
|
9
res/tsp8.txt
Executable file
9
res/tsp8.txt
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
1000 500
|
||||||
|
0 0
|
||||||
|
500 0
|
||||||
|
1000 0
|
||||||
|
500 500
|
||||||
|
700 0
|
||||||
|
800 0
|
||||||
|
900 0
|
||||||
|
800 500
|
85901
res/tsp85900.txt
Executable file
85901
res/tsp85900.txt
Executable file
File diff suppressed because it is too large
Load Diff
13510
res/usa13509.txt
Executable file
13510
res/usa13509.txt
Executable file
File diff suppressed because it is too large
Load Diff
32
src/Node.cpp
Executable file
32
src/Node.cpp
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* TDDD86 TSP
|
||||||
|
* This file contains the implementation of the Node structure.
|
||||||
|
* See Node.h for comments about each member.
|
||||||
|
* Your code should work properly with an unmodified version of this file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iomanip>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include "Node.h"
|
||||||
|
|
||||||
|
Node::Node(Point p, Node* _next)
|
||||||
|
: point(p.x, p.y), next(_next) {}
|
||||||
|
|
||||||
|
string Node::toString() const {
|
||||||
|
stringstream out;
|
||||||
|
out << "Node{addr=" << ((void*) this);
|
||||||
|
out << ", point=" << point;
|
||||||
|
if (next != nullptr) {
|
||||||
|
out << ", next=" << ((void*) next);
|
||||||
|
} else {
|
||||||
|
out << ", next=nullptr";
|
||||||
|
}
|
||||||
|
out << "}";
|
||||||
|
return out.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
ostream& operator <<(ostream& out, const Node& node) {
|
||||||
|
out << node.toString();
|
||||||
|
return out;
|
||||||
|
}
|
47
src/Node.h
Executable file
47
src/Node.h
Executable file
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* TDDD86 TSP
|
||||||
|
* This file contains the declaration of the Node structure.
|
||||||
|
* See Node.cpp for implementation of each member.
|
||||||
|
* Your code should work properly with an unmodified version of this file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NODE_H
|
||||||
|
#define NODE_H
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include "Point.h"
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Each Node structure represents a single node in a circular linked list
|
||||||
|
* used in a TSP tour.
|
||||||
|
*/
|
||||||
|
struct Node {
|
||||||
|
Point point; // this nodes point
|
||||||
|
Node* next; // pointer to next node in the list (nullptr if none)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constructs a new node storing the given point and next pointer.
|
||||||
|
*/
|
||||||
|
Node(Point p, Node* _next = nullptr);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns a string representation of the Node for debugging, such as
|
||||||
|
* "Node{addr=0x7e83f4, point=(2.5, 3.5), next=0x43b2a0}".
|
||||||
|
*
|
||||||
|
* Note that the toString output includes the node's memory address, as well
|
||||||
|
* as the memory address where its next pointer points.
|
||||||
|
*
|
||||||
|
* Keep in mind that toString won't be called if you try to print a Node*.
|
||||||
|
* You must print the node itself.
|
||||||
|
*/
|
||||||
|
string toString() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Outputs the given node to the given output stream (e.g. cout) in the same
|
||||||
|
* format as returned by its toString member function.
|
||||||
|
*/
|
||||||
|
ostream& operator <<(ostream& out, const Node& node);
|
||||||
|
|
||||||
|
#endif // END NODE_H
|
50
src/Point.cpp
Executable file
50
src/Point.cpp
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* TDDD86 TSP
|
||||||
|
* This file contains the implementation of the Point structure.
|
||||||
|
* See Point.h for comments about each member.
|
||||||
|
* Your code should work properly with an unmodified version of this file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iomanip>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <cmath>
|
||||||
|
#include <QGraphicsEllipseItem>
|
||||||
|
#include <QGraphicsLineItem>
|
||||||
|
#include "Point.h"
|
||||||
|
|
||||||
|
Point::Point(double _x, double _y)
|
||||||
|
: x(_x), y(_y) {}
|
||||||
|
|
||||||
|
double Point::distanceTo(Point that) const
|
||||||
|
{
|
||||||
|
double dx = x - that.x;
|
||||||
|
double dy = y - that.y;
|
||||||
|
return std::sqrt(dx*dx + dy*dy);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Point::draw(QGraphicsScene *scene) const
|
||||||
|
{
|
||||||
|
QGraphicsEllipseItem *item = new QGraphicsEllipseItem(x, y, 1, 1);
|
||||||
|
item->setBrush(QBrush(QColor(255, 0, 0)));
|
||||||
|
scene->addItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Point::drawTo(Point that, QGraphicsScene *scene) const
|
||||||
|
{
|
||||||
|
QGraphicsLineItem *item = new QGraphicsLineItem(x, y, that.x, that.y);
|
||||||
|
scene->addItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
string Point::toString() const
|
||||||
|
{
|
||||||
|
stringstream string;
|
||||||
|
string << "(" << std::fixed << std::setprecision(1) << std::showpoint
|
||||||
|
<< x << ", " << y << ")";
|
||||||
|
return string.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
ostream& operator <<(ostream& out, const Point& p) {
|
||||||
|
out << p.toString();
|
||||||
|
return out;
|
||||||
|
}
|
53
src/Point.h
Executable file
53
src/Point.h
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* TDDD86 TSP
|
||||||
|
* This file contains the declaration of the Point structure.
|
||||||
|
* See Point.cpp for implementation of each member.
|
||||||
|
* Your code should work properly with an unmodified version of this file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef POINT_H
|
||||||
|
#define POINT_H
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <QGraphicsScene>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Each Point structure represents a single point in the Euclidean plane.
|
||||||
|
*/
|
||||||
|
struct Point {
|
||||||
|
const double x; // x position of point
|
||||||
|
const double y; // y position of point
|
||||||
|
|
||||||
|
Point(double _x, double _y);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns Euclidean distance between this point and that.
|
||||||
|
*/
|
||||||
|
double distanceTo(Point that) const;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Draws the point onto the given QGraphicsScene.
|
||||||
|
*/
|
||||||
|
void draw(QGraphicsScene* scene) const;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Draws the line from this point to that onto the given QGraphicsScene.
|
||||||
|
*/
|
||||||
|
void drawTo(Point that, QGraphicsScene* scene) const;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns a string representation of the point, such as
|
||||||
|
* (2.5, 3.5).
|
||||||
|
*/
|
||||||
|
string toString() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Outputs the given point to the given output stream (e.g. cout) in the same
|
||||||
|
* format as returned by its toString member function.
|
||||||
|
*/
|
||||||
|
ostream& operator<<(ostream& out, const Point& p);
|
||||||
|
|
||||||
|
#endif // POINT_H
|
50
src/Tour.cpp
Executable file
50
src/Tour.cpp
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
// This is the .cpp file you will edit and turn in.
|
||||||
|
// We have provided a skeleton for you,
|
||||||
|
// but you must finish it as described in the spec.
|
||||||
|
// Also remove these comments here and add your own.
|
||||||
|
// TODO: remove this comment header
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include "Tour.h"
|
||||||
|
#include "Node.h"
|
||||||
|
#include "Point.h"
|
||||||
|
|
||||||
|
Tour::Tour()
|
||||||
|
{
|
||||||
|
// TODO: write this member
|
||||||
|
}
|
||||||
|
|
||||||
|
Tour::~Tour()
|
||||||
|
{
|
||||||
|
// TODO: write this member
|
||||||
|
}
|
||||||
|
|
||||||
|
void Tour::show()
|
||||||
|
{
|
||||||
|
// TODO: write this member
|
||||||
|
}
|
||||||
|
|
||||||
|
void Tour::draw(QGraphicsScene *scene)
|
||||||
|
{
|
||||||
|
// TODO: write this member
|
||||||
|
}
|
||||||
|
|
||||||
|
int Tour::size()
|
||||||
|
{
|
||||||
|
// TODO: write this member
|
||||||
|
}
|
||||||
|
|
||||||
|
double Tour::distance()
|
||||||
|
{
|
||||||
|
// TODO: write this member
|
||||||
|
}
|
||||||
|
|
||||||
|
void Tour::insertNearest(Point p)
|
||||||
|
{
|
||||||
|
// TODO: write this member
|
||||||
|
}
|
||||||
|
|
||||||
|
void Tour::insertSmallest(Point p)
|
||||||
|
{
|
||||||
|
// TODO: write this member
|
||||||
|
}
|
29
src/Tour.h
Executable file
29
src/Tour.h
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
// This is the .h file you will edit and turn in.
|
||||||
|
// We have provided a skeleton for you,
|
||||||
|
// but you must finish it as described in the spec.
|
||||||
|
// Also remove these comments here and add your own, as well as on the members.
|
||||||
|
// TODO: remove this comment header
|
||||||
|
|
||||||
|
#ifndef TOUR_H
|
||||||
|
#define TOUR_H
|
||||||
|
|
||||||
|
#include "Node.h"
|
||||||
|
#include "Point.h"
|
||||||
|
|
||||||
|
class Tour {
|
||||||
|
public:
|
||||||
|
|
||||||
|
Tour();
|
||||||
|
~Tour();
|
||||||
|
void show();
|
||||||
|
void draw(QGraphicsScene* scene);
|
||||||
|
int size();
|
||||||
|
double distance();
|
||||||
|
void insertNearest(Point p);
|
||||||
|
void insertSmallest(Point p);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TOUR_H
|
63
src/tsp.cpp
Executable file
63
src/tsp.cpp
Executable file
@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* TDDD86 TSP
|
||||||
|
* This client program uses your Tour class and contains the 'main'
|
||||||
|
* function to open the input file and set up the program's primitive GUI.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QGraphicsView>
|
||||||
|
#include <QGraphicsScene>
|
||||||
|
#include <chrono>
|
||||||
|
#include <thread>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include "Point.h"
|
||||||
|
#include "Tour.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
|
||||||
|
string filename = "tsp10.txt";
|
||||||
|
ifstream input;
|
||||||
|
input.open(filename);
|
||||||
|
|
||||||
|
// get dimensions
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
input >> width;
|
||||||
|
input >> height;
|
||||||
|
|
||||||
|
// setup graphical window
|
||||||
|
QGraphicsView *view = new QGraphicsView();
|
||||||
|
QGraphicsScene *scene = new QGraphicsScene();
|
||||||
|
view->setScene(scene);
|
||||||
|
view->scale(1, -1); //screen y-axis is inverted
|
||||||
|
view->setSceneRect(0, 0, width, height);
|
||||||
|
view->show();
|
||||||
|
|
||||||
|
// run insertion heuristic
|
||||||
|
Tour tour;
|
||||||
|
double x;
|
||||||
|
double y;
|
||||||
|
while (input >> x >> y) {
|
||||||
|
Point p(x, y);
|
||||||
|
tour.insertNearest(p);
|
||||||
|
//uncomment the 4 lines below to animate
|
||||||
|
//tour.draw(scene);
|
||||||
|
//std::chrono::milliseconds dura(50);
|
||||||
|
//std::this_thread::sleep_for(dura);
|
||||||
|
//a.processEvents();
|
||||||
|
}
|
||||||
|
input.close();
|
||||||
|
|
||||||
|
// print tour to standard output
|
||||||
|
cout << "Tour distance: " << std::fixed << std::setprecision(4)
|
||||||
|
<< std::showpoint << tour.distance() << endl;
|
||||||
|
cout << "Number of points: " << tour.size() << endl;
|
||||||
|
tour.show();
|
||||||
|
|
||||||
|
// draw tour
|
||||||
|
tour.draw(scene);
|
||||||
|
return a.exec(); // start Qt event loop
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user