first commit

This commit is contained in:
弘博
2020-06-19 11:02:32 +08:00
parent a9deaaf586
commit 894da4a283
10 changed files with 3321 additions and 0 deletions

1
Timer.cpp Normal file
View File

@@ -0,0 +1 @@
#include "Timer.h"

40
Timer.h Normal file
View File

@@ -0,0 +1,40 @@
#ifndef _TIMER_H_
#define _TIMER_H_
#include <windows.h>
class Timer {
private:
__int64 freq, tStart, tStop;
public:
Timer() {
// Get the frequency of the hi-res timer
QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
} //end-TimerClass
void Start() {
// Use hi-res timer
QueryPerformanceCounter((LARGE_INTEGER*)&tStart);
} //end-Start
void Stop() {
// Perform operations that require timing
QueryPerformanceCounter((LARGE_INTEGER*)&tStop);
} //end-Stop
// Returns time in milliseconds
double ElapsedTime() {
// Calculate time difference in milliseconds
return ((double)(tStop - tStart) / (double)freq) * 1e3;
} //end-Elapsed
};
#endif
////////////////////////////////////////////////
//// Timer t;
//// t.Start();
//// t.Stop();
//// printf( " Time elapsed is : %lf (ms). \n ", t.ElapsedTime());
///////////////////////////////////////////////

199
cities.csv Normal file
View File

@@ -0,0 +1,199 @@
Afghanistan,Kabul,34.4667,69.1833
Albania,Tirane,41.3,19.8167
Algeria,Algiers,36.7,3.13333
American Samoa,Pago Pago,-14.2667,-170.717
Andorra,Andorra la Vella,42.5167,1.53333
Angola,Luanda,-8.83333,13.25
Antigua and Barbuda,W. Indies,17.3333,-61.8
Argentina,Buenos Aires,-36.5,-60
Armenia,Yerevan,40.1667,44.5167
Aruba,Oranjestad,12.5333,-70.0333
Australia,Canberra (Use Sydney),-35.25,149.133
Austria,Vienna,48.2,16.3667
Azerbaijan,Baku,40.4833,49.9333
Bahamas,Nassau,25.0833,-77.3333
Bahrain,Manama,26.1667,50.5
Bangladesh,Dhaka,23.7167,90.4333
Barbados,Bridgetown,13.0833,-59.5
Belarus,Minsk,53.8667,27.5
Belgium,Brussels,50.85,4.35
Belize,Belmopan,17.3,-88.5
Benin,Porto-Novo,6.38333,2.7
Bhutan,Thimphu,27.5167,89.75
Bolivia,La Paz,-16.3333,-68.1667
Bosnia and Herzegovina,Sarajevo,43.8667,18.4333
Botswana,Gaborone,-24.75,25.95
Brazil,Brasilia,-15.7833,-47.9167
British Virgin Islands,Road Town,18.45,-64.6167
Brunei Darussalam,Bandar Seri Begawan,4.86667,115
Bulgaria,Sofia,42.75,23.3333
Burkina Faso,Ouagadougou,12.25,-1.5
Burundi,Bujumbura,-3.26667,29.3
Cambodia,Phnom Penh,11.55,104.917
Cameroon,Yaounde,3.83333,11.5833
Canada,Ottawa,45.45,-75.7
Cape Verde,Praia,15.0333,-23.5667
Cayman Islands,George Town,19.3333,-81.4
Central African Republic,Bangui,4.38333,18.5833
Chad,N'Djamena,12.1667,14.9833
Chile,Santiago,-33.4,-70.6667
China,Beijing,39.9167,116.333
Colombia,Bogota,4.56667,-74
Comros,Moroni,-11.6667,43.2667
Congo,Brazzaville,-4.15,15.2
Costa Rica,San Jose,9.91667,-84.0333
Cote d'Ivoire,Yamoussoukro,6.81667,-5.28333
Croatia,Zagreb,45.8333,15.9667
Cuba,Havana,23.1333,-82.3667
Cyprus,Nicosia,35.1667,33.4167
Czech Republic,Prague,50.0833,14.3667
Democratic People's Republic of,P'yongyang,39.15,125.5
Democratic Republic of the Congo,Kinshasa,-4.33333,15.25
Denmark,Copenhagen,55.6833,12.5667
Djibouti,Djibouti,11.1333,42.3333
Dominica,Roseau,15.3333,-61.4
Dominica Republic,Santo Domingo,18.5,-69.9833
East Timor,Dili,-8.48333,125.567
Ecuador,Quito,-0.25,-78.5833
Egypt,Cairo,30.0167,31.2333
El Salvador,San Salvador,13.6667,-89.1667
Equatorial Guinea,Malabo,3.75,8.83333
Eritrea,Asmara,15.3167,38.9167
Estonia,Tallinn,59.3667,24.8
Ethiopia,Addis Ababa,9.03333,38.7
Falkland Islands (Malvinas),Stanley,-51.6667,-59.85
Faroe Islands,Torshavn,62.0833,-6.93333
Fiji,Suva,-18.1,178.5
Finland,Helsinki,60.25,25.05
France,Paris,48.8333,2.33333
French Guiana,Cayenne,5.08333,-52.3
French Polynesia,Papeete,-17.5333,-149.567
Gabon,Libreville,0.416667,9.43333
Gambia,Banjul,13.4667,-16.6667
Georgia,T'bilisi,41.7167,44.8333
Germany,Berlin,52.5,13.4167
Ghana,Accra,5.58333,-0.1
Greece,Athens,37.9667,23.7667
Greenland,Nuuk,64.1667,-51.5833
Guadeloupe,Basse-Terre,16,-61.7333
Guatemala,Guatemala,14.6667,-90.3667
Guernsey,St. Peter Port,49.4333,-2.55
Guinea,Conakry,9.48333,-13.8167
Guinea-Bissau,Bissau,11.75,-15.75
Guyana,Georgetown,6.83333,-58.2
Haiti,Port-au-Prince,18.6667,-72.3333
Honduras,Tegucigalpa,14.0833,-87.2333
Hungary,Budapest,47.4833,19.0833
Iceland,Reykjavik,64.1667,-21.95
India,New Delhi,28.6167,77.2167
Indonesia,Jakarta,-6.15,106.817
Iran (Islamic Republic of),Tehran,35.7333,51.5
Iraq,Baghdad,33.3333,44.5
Ireland,Dublin,53.35,-6.25
Israel,Jerusalem,31.7833,35.2
Italy,Rome,41.9,12.4833
Jamaica,Kingston,18,-76.8333
Japan,Tokyo,35.682,139.69
Jordan,Amman,31.95,35.8667
Kazakhstan,Astana,51.1667,71.5
Kenya,Nairobi,-1.28333,36.8
Kiribati,Tarawa,1.5,173
Kuwait,Kuwait,29.5,48
Kyrgyzstan,Bishkek,42.9,74.7667
Lao People@s Democratic Republic,Vientiane,17.9667,102.6
Latvia,Riga,56.8833,24.1333
Lebanon,Beirut,33.8833,35.5167
Lesotho,Maseru,-29.3,27.5
Liberia,Monrovia,6.3,-10.7833
Libyan Arab Jamahiriya,Tripoli,32.8167,13.1167
Liechtenstein,Vaduz,47.1333,9.51667
Lithuania,Vilnius,54.6333,25.3167
Luxembourg,Luxembourg,49.6167,6.15
Madagascar,Antananarivo,-18.9167,47.5167
Malawi,Lilongwe,-14,33.8
Malaysia,Kuala Lumpur,3.15,101.683
Maldives,Male,4,73.4667
Mali,Bamako,12.5667,-7.91667
Malta,Valletta,35.9,14.5167
Martinique,Fort-de-France,14.6,-61.0333
Mauritania,Nouakchott,-20.1667,57.5
Mayotte,Mamoudzou,-12.8,45.2333
Mexico,Mexico,19.3333,-99.1667
Micronesia (Federated States of),Palikir,6.91667,158.15
Moldova (Republic of),Chisinau ,47.025,28.839
Mozambique,Maputo,-25.9667,32.5333
Myanmar,Yangon,16.75,96.3333
Namibia,Windhoek,-22.5833,17.0667
Nepal,Kathmandu,27.75,85.3333
Netherlands,Amsterdam,52.3833,4.9
Netherlands Antilles,Willemstad,12.0833,-69
New Caledonia,Noumea,-22.2833,166.5
New Zealand,Wellington,-41.3167,174.767
Nicaragua,Managua,12.1,-86.3333
Niger,Niamey,13.45,2.1
Nigeria,Abuja,9.08333,7.53333
Northern Mariana Islands,Saipan,15.2,145.75
Norway,Oslo,59.9167,10.75
Oman,Masqat,23.6167,58.6
Pakistan,Islamabad,33.6667,73.1667
Palau,Koror,7.33333,134.467
Panama,Panama,9,-79.4167
Papua New Guinea,Port Moresby,-9.4,147.133
Paraguay,Asuncion,-25.1667,-57.5
Peru,Lima,-12,-77
Philippines,Manila,14.6667,121.05
Poland,Warsaw,52.2167,21
Portugal,Lisbon,38.7,-9.16667
Puerto Rico,San Juan,18.4667,-66.1167
Qatar,Doha,25.25,51.5833
Republic of Korea,Seoul,37.5167,126.967
Romania,Bucuresti,44.45,26.1667
Russian Federation,Moskva,55.75,37.5833
Rwanda,Kigali,-1.98333,30.0667
Saint Kitts and Nevis,Basseterre,17.2833,-62.7167
Saint Lucia,Castries,14.0333,-60.9667
Saint Pierre and Miquelon,Saint-Pierre,46.7667,-56.2
Saint vincent and the Grenadines,Kingstown,13.1667,-61.1667
Samoa,Apia,-13.8333,-171.833
San Marino,San Marino,43.9167,12.5
Sao Tome and Principe,Sao Tome,0.166667,6.65
Saudi Arabia,Riyadh,24.6833,46.7
Senegal,Dakar,14.5667,-17.4833
Sierra Leone,Freetown,8.5,-13.2833
Singapore,Singapore,1.281,103.852
Slovakia,Bratislava,48.1667,17.1167
Slovenia,Ljubljana,46.0667,14.55
Solomon Islands,Honiara,-9.45,159.95
Somalia,Mogadishu,2.03333,45.4167
South Africa,Pretoria (Use Johannesburg),-25.7333,28.2
Spain,Madrid,40.4167,-3.75
Sudan,Khartoum,15.5167,32.5833
Suriname,Paramaribo,5.83333,-55.1667
Swaziland,Mbabane,-26.3,31.1
Sweden,Stockholm,59.3333,18.05
Switzerland,Bern,46.95,7.46667
Syrian Arab Republic,Damascus,33.5,36.3
Tajikistan,Dushanbe,38.55,68.8
Thailand,Bangkok,13.75,100.583
The Former Yugoslav Republic of Macedonia,Skopje,42.0167,21.4333
Togo,Lome,6.15,1.33333
Tonga,Nuku'alofa,-21.1667,-174
Tunisia,Tunis,36.8333,10.1833
Turkey,Ankara,39.95,32.9
Turkmenistan,Ashgabat,38,57.8333
Tuvalu,Funafuti,-8.51667,179.217
Uganda,Kampala,0.333333,32.5
Ukraine,Kiev,50.5,30.4667
United Arab Emirates,Abu Dhabi,24.4667,54.3667
United Kingdom of Great Britain and Northern Ireland,London,51.6,-0.0833333
United Republic of Tanzania,Dodoma,-6.13333,35.75
United States of America,Washington DC,38.895,-77.038
United States of Virgin Islands,Charlotte Amalie,18.35,-64.9333
Uruguay,Montevideo,-34.8333,-56.1833
Uzbekistan,Tashkent,41.3333,69.1667
Vanuatu,Port-Vila,-17.75,168.3
Venezuela,Caracas,10.5,-66.9167
Vietnam,Hanoi,21.0833,105.917
Yugoslavia,Belgrade,44.8333,20.6167
Zambia,Lusaka,-15.4667,28.2667
Zimbabwe,Harare,-17.7167,31.0333
1 Afghanistan Kabul 34.4667 69.1833
2 Albania Tirane 41.3 19.8167
3 Algeria Algiers 36.7 3.13333
4 American Samoa Pago Pago -14.2667 -170.717
5 Andorra Andorra la Vella 42.5167 1.53333
6 Angola Luanda -8.83333 13.25
7 Antigua and Barbuda W. Indies 17.3333 -61.8
8 Argentina Buenos Aires -36.5 -60
9 Armenia Yerevan 40.1667 44.5167
10 Aruba Oranjestad 12.5333 -70.0333
11 Australia Canberra (Use Sydney) -35.25 149.133
12 Austria Vienna 48.2 16.3667
13 Azerbaijan Baku 40.4833 49.9333
14 Bahamas Nassau 25.0833 -77.3333
15 Bahrain Manama 26.1667 50.5
16 Bangladesh Dhaka 23.7167 90.4333
17 Barbados Bridgetown 13.0833 -59.5
18 Belarus Minsk 53.8667 27.5
19 Belgium Brussels 50.85 4.35
20 Belize Belmopan 17.3 -88.5
21 Benin Porto-Novo 6.38333 2.7
22 Bhutan Thimphu 27.5167 89.75
23 Bolivia La Paz -16.3333 -68.1667
24 Bosnia and Herzegovina Sarajevo 43.8667 18.4333
25 Botswana Gaborone -24.75 25.95
26 Brazil Brasilia -15.7833 -47.9167
27 British Virgin Islands Road Town 18.45 -64.6167
28 Brunei Darussalam Bandar Seri Begawan 4.86667 115
29 Bulgaria Sofia 42.75 23.3333
30 Burkina Faso Ouagadougou 12.25 -1.5
31 Burundi Bujumbura -3.26667 29.3
32 Cambodia Phnom Penh 11.55 104.917
33 Cameroon Yaounde 3.83333 11.5833
34 Canada Ottawa 45.45 -75.7
35 Cape Verde Praia 15.0333 -23.5667
36 Cayman Islands George Town 19.3333 -81.4
37 Central African Republic Bangui 4.38333 18.5833
38 Chad N'Djamena 12.1667 14.9833
39 Chile Santiago -33.4 -70.6667
40 China Beijing 39.9167 116.333
41 Colombia Bogota 4.56667 -74
42 Comros Moroni -11.6667 43.2667
43 Congo Brazzaville -4.15 15.2
44 Costa Rica San Jose 9.91667 -84.0333
45 Cote d'Ivoire Yamoussoukro 6.81667 -5.28333
46 Croatia Zagreb 45.8333 15.9667
47 Cuba Havana 23.1333 -82.3667
48 Cyprus Nicosia 35.1667 33.4167
49 Czech Republic Prague 50.0833 14.3667
50 Democratic People's Republic of P'yongyang 39.15 125.5
51 Democratic Republic of the Congo Kinshasa -4.33333 15.25
52 Denmark Copenhagen 55.6833 12.5667
53 Djibouti Djibouti 11.1333 42.3333
54 Dominica Roseau 15.3333 -61.4
55 Dominica Republic Santo Domingo 18.5 -69.9833
56 East Timor Dili -8.48333 125.567
57 Ecuador Quito -0.25 -78.5833
58 Egypt Cairo 30.0167 31.2333
59 El Salvador San Salvador 13.6667 -89.1667
60 Equatorial Guinea Malabo 3.75 8.83333
61 Eritrea Asmara 15.3167 38.9167
62 Estonia Tallinn 59.3667 24.8
63 Ethiopia Addis Ababa 9.03333 38.7
64 Falkland Islands (Malvinas) Stanley -51.6667 -59.85
65 Faroe Islands Torshavn 62.0833 -6.93333
66 Fiji Suva -18.1 178.5
67 Finland Helsinki 60.25 25.05
68 France Paris 48.8333 2.33333
69 French Guiana Cayenne 5.08333 -52.3
70 French Polynesia Papeete -17.5333 -149.567
71 Gabon Libreville 0.416667 9.43333
72 Gambia Banjul 13.4667 -16.6667
73 Georgia T'bilisi 41.7167 44.8333
74 Germany Berlin 52.5 13.4167
75 Ghana Accra 5.58333 -0.1
76 Greece Athens 37.9667 23.7667
77 Greenland Nuuk 64.1667 -51.5833
78 Guadeloupe Basse-Terre 16 -61.7333
79 Guatemala Guatemala 14.6667 -90.3667
80 Guernsey St. Peter Port 49.4333 -2.55
81 Guinea Conakry 9.48333 -13.8167
82 Guinea-Bissau Bissau 11.75 -15.75
83 Guyana Georgetown 6.83333 -58.2
84 Haiti Port-au-Prince 18.6667 -72.3333
85 Honduras Tegucigalpa 14.0833 -87.2333
86 Hungary Budapest 47.4833 19.0833
87 Iceland Reykjavik 64.1667 -21.95
88 India New Delhi 28.6167 77.2167
89 Indonesia Jakarta -6.15 106.817
90 Iran (Islamic Republic of) Tehran 35.7333 51.5
91 Iraq Baghdad 33.3333 44.5
92 Ireland Dublin 53.35 -6.25
93 Israel Jerusalem 31.7833 35.2
94 Italy Rome 41.9 12.4833
95 Jamaica Kingston 18 -76.8333
96 Japan Tokyo 35.682 139.69
97 Jordan Amman 31.95 35.8667
98 Kazakhstan Astana 51.1667 71.5
99 Kenya Nairobi -1.28333 36.8
100 Kiribati Tarawa 1.5 173
101 Kuwait Kuwait 29.5 48
102 Kyrgyzstan Bishkek 42.9 74.7667
103 Lao People@s Democratic Republic Vientiane 17.9667 102.6
104 Latvia Riga 56.8833 24.1333
105 Lebanon Beirut 33.8833 35.5167
106 Lesotho Maseru -29.3 27.5
107 Liberia Monrovia 6.3 -10.7833
108 Libyan Arab Jamahiriya Tripoli 32.8167 13.1167
109 Liechtenstein Vaduz 47.1333 9.51667
110 Lithuania Vilnius 54.6333 25.3167
111 Luxembourg Luxembourg 49.6167 6.15
112 Madagascar Antananarivo -18.9167 47.5167
113 Malawi Lilongwe -14 33.8
114 Malaysia Kuala Lumpur 3.15 101.683
115 Maldives Male 4 73.4667
116 Mali Bamako 12.5667 -7.91667
117 Malta Valletta 35.9 14.5167
118 Martinique Fort-de-France 14.6 -61.0333
119 Mauritania Nouakchott -20.1667 57.5
120 Mayotte Mamoudzou -12.8 45.2333
121 Mexico Mexico 19.3333 -99.1667
122 Micronesia (Federated States of) Palikir 6.91667 158.15
123 Moldova (Republic of) Chisinau 47.025 28.839
124 Mozambique Maputo -25.9667 32.5333
125 Myanmar Yangon 16.75 96.3333
126 Namibia Windhoek -22.5833 17.0667
127 Nepal Kathmandu 27.75 85.3333
128 Netherlands Amsterdam 52.3833 4.9
129 Netherlands Antilles Willemstad 12.0833 -69
130 New Caledonia Noumea -22.2833 166.5
131 New Zealand Wellington -41.3167 174.767
132 Nicaragua Managua 12.1 -86.3333
133 Niger Niamey 13.45 2.1
134 Nigeria Abuja 9.08333 7.53333
135 Northern Mariana Islands Saipan 15.2 145.75
136 Norway Oslo 59.9167 10.75
137 Oman Masqat 23.6167 58.6
138 Pakistan Islamabad 33.6667 73.1667
139 Palau Koror 7.33333 134.467
140 Panama Panama 9 -79.4167
141 Papua New Guinea Port Moresby -9.4 147.133
142 Paraguay Asuncion -25.1667 -57.5
143 Peru Lima -12 -77
144 Philippines Manila 14.6667 121.05
145 Poland Warsaw 52.2167 21
146 Portugal Lisbon 38.7 -9.16667
147 Puerto Rico San Juan 18.4667 -66.1167
148 Qatar Doha 25.25 51.5833
149 Republic of Korea Seoul 37.5167 126.967
150 Romania Bucuresti 44.45 26.1667
151 Russian Federation Moskva 55.75 37.5833
152 Rwanda Kigali -1.98333 30.0667
153 Saint Kitts and Nevis Basseterre 17.2833 -62.7167
154 Saint Lucia Castries 14.0333 -60.9667
155 Saint Pierre and Miquelon Saint-Pierre 46.7667 -56.2
156 Saint vincent and the Grenadines Kingstown 13.1667 -61.1667
157 Samoa Apia -13.8333 -171.833
158 San Marino San Marino 43.9167 12.5
159 Sao Tome and Principe Sao Tome 0.166667 6.65
160 Saudi Arabia Riyadh 24.6833 46.7
161 Senegal Dakar 14.5667 -17.4833
162 Sierra Leone Freetown 8.5 -13.2833
163 Singapore Singapore 1.281 103.852
164 Slovakia Bratislava 48.1667 17.1167
165 Slovenia Ljubljana 46.0667 14.55
166 Solomon Islands Honiara -9.45 159.95
167 Somalia Mogadishu 2.03333 45.4167
168 South Africa Pretoria (Use Johannesburg) -25.7333 28.2
169 Spain Madrid 40.4167 -3.75
170 Sudan Khartoum 15.5167 32.5833
171 Suriname Paramaribo 5.83333 -55.1667
172 Swaziland Mbabane -26.3 31.1
173 Sweden Stockholm 59.3333 18.05
174 Switzerland Bern 46.95 7.46667
175 Syrian Arab Republic Damascus 33.5 36.3
176 Tajikistan Dushanbe 38.55 68.8
177 Thailand Bangkok 13.75 100.583
178 The Former Yugoslav Republic of Macedonia Skopje 42.0167 21.4333
179 Togo Lome 6.15 1.33333
180 Tonga Nuku'alofa -21.1667 -174
181 Tunisia Tunis 36.8333 10.1833
182 Turkey Ankara 39.95 32.9
183 Turkmenistan Ashgabat 38 57.8333
184 Tuvalu Funafuti -8.51667 179.217
185 Uganda Kampala 0.333333 32.5
186 Ukraine Kiev 50.5 30.4667
187 United Arab Emirates Abu Dhabi 24.4667 54.3667
188 United Kingdom of Great Britain and Northern Ireland London 51.6 -0.0833333
189 United Republic of Tanzania Dodoma -6.13333 35.75
190 United States of America Washington DC 38.895 -77.038
191 United States of Virgin Islands Charlotte Amalie 18.35 -64.9333
192 Uruguay Montevideo -34.8333 -56.1833
193 Uzbekistan Tashkent 41.3333 69.1667
194 Vanuatu Port-Vila -17.75 168.3
195 Venezuela Caracas 10.5 -66.9167
196 Vietnam Hanoi 21.0833 105.917
197 Yugoslavia Belgrade 44.8333 20.6167
198 Zambia Lusaka -15.4667 28.2667
199 Zimbabwe Harare -17.7167 31.0333

1975
routes.csv Normal file

File diff suppressed because it is too large Load Diff

5
tmp.html Normal file
View File

@@ -0,0 +1,5 @@
<!DOCTYPE html><html><head><style type='text/css'>body, html{width: 100%;height: 100%;margin:0;font-family:<><CEA2><EFBFBD>ź<EFBFBD> ';}#allmap{height:100%;width:100%;}#r-result{width:100%;}</style><script type='text/javascript' src='http://api.map.baidu.com/api?v=2.0&ak=nSxiPohfziUaCuONe4ViUP2N'></script><title>Shortest path from London to Beijing</title></head><body><div id='allmap'></div></div></body></html><script type='text/javascript'>var map = new BMap.Map('allmap');var point = new BMap.Point(0, 0);map.centerAndZoom(point, 2);map.enableScrollWheelZoom(true);var marker0 = new BMap.Marker(new BMap.Point(-0.0833, 51.6000));map.addOverlay(marker0);
var infoWindow0 = new BMap.InfoWindow("<p style = 'fontsize:14px;'>country: United Kingdom of Great Britain and Northern Ireland<br/>city : London</p>");marker0.addEventListener("click", function(){this.openInfoWindow(infoWindow0);}); var marker1 = new BMap.Marker(new BMap.Point(103.8520, 1.2810));map.addOverlay(marker1);
var infoWindow1 = new BMap.InfoWindow("<p style = 'fontsize:14px;'>country: Singapore<br/>city : Singapore</p>");marker1.addEventListener("click", function(){this.openInfoWindow(infoWindow1);}); var contentString01 = 'London, United Kingdom of Great Britain and Northern Ireland --> Singapore, Singapore (plane - 17.00 hours - $450.00 - )';var path1 = new BMap.Polyline([new BMap.Point(-0.0833, 51.6000),new BMap.Point(103.8520, 1.2810)], {strokeColor:'#25a45b', strokeWeight:8, strokeOpacity:0.8});map.addOverlay(path1);path1.addEventListener("click", function(){alert(contentString01);});var marker1 = new BMap.Marker(new BMap.Point(103.8520, 1.2810));map.addOverlay(marker1);
var infoWindow1 = new BMap.InfoWindow("<p style = 'fontsize:14px;'>country: Singapore<br/>city : Singapore</p>");marker1.addEventListener("click", function(){this.openInfoWindow(infoWindow1);}); var marker2 = new BMap.Marker(new BMap.Point(116.3330, 39.9167));map.addOverlay(marker2);
var infoWindow2 = new BMap.InfoWindow("<p style = 'fontsize:14px;'>country: China<br/>city : Beijing</p>");marker2.addEventListener("click", function(){this.openInfoWindow(infoWindow2);}); var contentString02 = 'Singapore, Singapore --> Beijing, China (plane - 10.00 hours - $306.00 - )';var path2 = new BMap.Polyline([new BMap.Point(103.8520, 1.2810),new BMap.Point(116.3330, 39.9167)], {strokeColor:'#25a45b', strokeWeight:8, strokeOpacity:0.8});map.addOverlay(path2);path2.addEventListener("click", function(){alert(contentString02);});</script>

View File

@@ -0,0 +1,31 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29509.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "数据结构实习-最短路径", "数据结构实习-最短路径.vcxproj", "{49090136-2EE7-4219-AA91-E99162DAE286}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{49090136-2EE7-4219-AA91-E99162DAE286}.Debug|x64.ActiveCfg = Debug|x64
{49090136-2EE7-4219-AA91-E99162DAE286}.Debug|x64.Build.0 = Debug|x64
{49090136-2EE7-4219-AA91-E99162DAE286}.Debug|x86.ActiveCfg = Debug|Win32
{49090136-2EE7-4219-AA91-E99162DAE286}.Debug|x86.Build.0 = Debug|Win32
{49090136-2EE7-4219-AA91-E99162DAE286}.Release|x64.ActiveCfg = Release|x64
{49090136-2EE7-4219-AA91-E99162DAE286}.Release|x64.Build.0 = Release|x64
{49090136-2EE7-4219-AA91-E99162DAE286}.Release|x86.ActiveCfg = Release|Win32
{49090136-2EE7-4219-AA91-E99162DAE286}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {90E5D97A-0679-4ACA-BBEF-D3C053775B74}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>{49090136-2EE7-4219-AA91-E99162DAE286}</ProjectGuid>
<RootNamespace>数据结构实习最短路径</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<StackReserveSize>
</StackReserveSize>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<StackReserveSize>
</StackReserveSize>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Timer.cpp" />
<ClCompile Include="源.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Timer.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="源文件">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="头文件">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="资源文件">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="源.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="Timer.cpp">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Timer.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

897
源.cpp Normal file
View File

@@ -0,0 +1,897 @@
#include<stdio.h>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include"Timer.h"
using namespace std;
#define MAX_VERTEX_NUM 200
typedef char TransKind ;
typedef char InfoType ;
typedef struct
{
bool pass = false;
char country[64] = {0};
char city[64] = {0};
double latitude;//γ<><CEB3>
double longitude;//<2F><><EFBFBD><EFBFBD>
}City,VertexType; //<2F><><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9>
//<2F>߽<EFBFBD><DFBD><EFBFBD>
typedef struct ArcNode
{
int adjvex; //<2F>ڽӵĶ<D3B5><C4B6><EFBFBD>
struct ArcNode* nextarc; //<2F><>һ<EFBFBD><D2BB><EFBFBD>ڽӱ<DABD>ָ<EFBFBD><D6B8>
TransKind kind[6] = { 0 };
double time;
double money;
InfoType info[1024] = { 0 };
}ArcNode;
//<2F>ڽӱ<DABD><D3B1>еĸ<D0B5><C4B8><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
typedef struct VNode {
VertexType data;
ArcNode* firstArc=nullptr;
}VNode,AdjList[MAX_VERTEX_NUM];
//ͼ<>Ľṹ
typedef struct {
AdjList vertices; //<2F>ڽӱ<DABD>
int vexnum=0; //<2F><><EFBFBD><EFBFBD>
int arcnum=0; //<2F><><EFBFBD><EFBFBD>
}Graph;
bool CreateCities(const char* pathname, vector<City>& city)
{
//<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>city.csv<73>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
FILE *fp = nullptr;
fopen_s(&fp,pathname, "rt");
if (!fp)
{
printf("Cannot open the city file: %s!",pathname);
return false;
exit(0);
}
City tmpcity;//<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
int i = 0, j = 0;
char* record = NULL;
char* next_token =nullptr; //<2F><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD>
char buf[1024];//ÿһ<C3BF>е<EFBFBD><D0B5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char* line = NULL;
/*int count = 0;*/
while ((line = fgets(buf, 1024, fp)) != NULL)
{
record = strtok_s(buf, ",",&next_token); //<2F><>","<22><>Ϊ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ϣ
while (record != NULL)
{
switch (j)
{
case 0://<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>Ϊcountry
strcpy_s(tmpcity.country, record);
j++;
break;
case 1://<2F>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>Ϊcity
strcpy_s(tmpcity.city, record);
j++;
break;
case 2://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>Ϊγ<CEAA><CEB3>
tmpcity.latitude = atof(record);
j++;
break;
case 3://<2F><><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>ǰΪ<C7B0><CEAA><EFBFBD><EFBFBD>
tmpcity.longitude = atof(record);
j = 0;
break;
}
record = strtok_s(NULL, "," ,&next_token); //<2F>ڶ<EFBFBD><DAB6>ε<EFBFBD><CEB5>ã<EFBFBD><C3A3><EFBFBD>ǰһ<C7B0><D2BB><EFBFBD>ָ<EFBFBD><D6B8>ĵط<C4B5><D8B7><EFBFBD>ȡ, <20><><EFBFBD><EFBFBD>û<EFBFBD>ҵ<EFBFBD><D2B5>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>null
}
city.push_back(tmpcity); //<2F><><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>city<74><79>
//<2F><>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>еij<D0B5><C4B3>ж<EFBFBD>ȡ
/*count++;
if (count == 99)break;*/
}
fclose(fp);
printf("<EFBFBD><EFBFBD>ȡcity<EFBFBD>ɹ<EFBFBD>\n");
return true;
}
int SearchCity(const char* des, vector<City>&city)
{ //<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD>des<65>ڳ<EFBFBD><DAB3>б<EFBFBD>city<74>е<EFBFBD><D0B5>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>
for (int pos = 0; pos < int(city.size()); pos++)
{
if (!strcmp(city[pos].city, des))
return pos;// <20>ҵ<EFBFBD><D2B5>򷵻<EFBFBD><F2B7B5BB>±<EFBFBD>
}
return -1; //<2F><>δ<EFBFBD>ҵ<EFBFBD><D2B5>򷵻<EFBFBD>-1
}
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼʱ<CDBC><CAB1><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ϢҲ<CFA2><D2B2>ȡ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD><E6B4A2>
bool CreateGraph(const char* pathname,Graph& G, vector<City>city)
{ //<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼG<CDBC><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>city<74><79><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>route.csv<73>ļ<EFBFBD>
//<2F><>ʼ<EFBFBD><CABC>
G.vexnum = city.size();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊcity<74><79><EFBFBD><EFBFBD>
G.arcnum = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼΪ0
for (int i = 0; i < G.vexnum; i++)
{
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
G.vertices[i].data = city[i];
G.vertices[i].firstArc = nullptr;
}
FILE* fp = nullptr;
fopen_s(&fp, pathname, "rt");
if (!fp)
{
printf("Cannot open the route file: %s",pathname);
return false;
}
char* record = nullptr;
char* next_token = nullptr; //<2F><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD>
char buf[1024]; //ÿһ<C3BF>е<EFBFBD><D0B5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char* line = nullptr;
while ((line = fgets(buf, 1024, fp)) != nullptr)
{
int j = 0; //j<><6A><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int v1, v2; //v1Ϊ<31><CEAA><EFBFBD>㣬v2 Ϊ<>յ<EFBFBD>
ArcNode* tmparc = new ArcNode; //tmparc<72><63>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
tmparc->nextarc = nullptr;
record = strtok_s(buf, ",",&next_token);
while (j <= 6)
{
if (j == 0)
{ //j == 0ʱ<30>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char temp[1024] = { 0 }; //temp<6D><70><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ϣ
strcpy_s(temp, record);
v1 = SearchCity(temp, city); //v1Ϊ<31><CEAA><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>
if (v1 == -1)break;
record = strtok_s(NULL, ",",&next_token);
j++;
}
else if (j == 1)
{ //j == 1ʱ<31>ҵ<EFBFBD><D2B5>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
char temp[1024] = { 0 };
strcpy_s(temp, record);
v2 = SearchCity(temp, city); //v2Ϊ<32>յ<EFBFBD><D5B5>±<EFBFBD>
if (v2 == -1)break;
tmparc->adjvex = v2; //<2F>ñߵ<C3B1>adjvexΪv2
record = strtok_s(NULL, ",", &next_token);
j++;
}
else if (j == 2)
{ //j == 2ʱ<32><CAB1>ȡ<EFBFBD><C8A1>ͨ<EFBFBD><CDA8>ʽ
char temp[1024] = { 0 };
strcpy_s(temp, record);
if (!strcmp(temp, "plane"))
{
strcpy_s(tmparc->kind, "plane");
}
else if (!strcmp(temp, "bus"))
{
strcpy_s(tmparc->kind, "bus");
}
else if (!strcmp(temp, "train"))
{
strcpy_s(tmparc->kind, "train");
}
record = strtok_s(NULL, ",", &next_token);
j++;
}
else if (j == 3)
{ //j == 3ʱ<33><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
char temp[1024] = { 0 };
strcpy_s(temp, record);
tmparc->time = atof(temp);
record = strtok_s(NULL, ",", &next_token);
j++;
}
else if (j == 4)
{ //j == 4ʱ<34><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char temp[1024] = { 0 };
strcpy_s(temp, record);
tmparc->money = atof(temp); //atoi<6F><69><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> atofΪdouble
record = strtok_s(NULL, "\n", &next_token);
//<2F><><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD>ϢΪ<CFA2>ߵĸ<DFB5><C4B8><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>Զ<EFBFBD><D4B6><EFBFBD>Ϊ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>з<EFBFBD>Ϊ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ\n
j++;
}
else if (j == 5)
{ //j == 5ʱ<35><CAB1><EFBFBD><EFBFBD><EBB8BD><EFBFBD><EFBFBD>Ϣ
char temp[1024] = { 0 };
strcpy_s(temp, record);
//<2F><>Ϊinfo<66><6F><EFBFBD><EFBFBD>'<27><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>html<6D>п<EFBFBD><D0BF>ӻ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><><D7AA>
char p[1024] = { 0 };
int i = 0; int k = 0;
if(strstr(temp, "\'"))
{
while (temp[k] != '\0')
{
while (temp[k] != '\''&& temp[k] != '\0')
{
p[i] = temp[k];
i++, k++;
}
if (temp[k] == '\'')
{
p[i++] = '\\';
p[i++] = '\'';
k++;
}
else if (temp[k] == '\0')
{
p[i] = '\0';
}
}
}
strcpy_s(tmparc->info, p);
j++;
}
else if (j == 6)
{ //j == 6ʱ<36><CAB1><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>ӵ<EFBFBD>v1<76><31><EFBFBD>ڽӱ<DABD><D3B1><EFBFBD>ȥ
if (G.vertices[v1].firstArc == nullptr)
{
G.vertices[v1].firstArc = tmparc;//<2F><>ͷ<EFBFBD>ڵ<EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ͷ<EFBFBD>ڵ<EFBFBD>
G.vertices[v1].firstArc->nextarc = nullptr;
}
else
{ //<2F><>ͷ<EFBFBD>ڵ㲻<DAB5>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ
ArcNode* p= G.vertices[v1].firstArc;
while (p->nextarc!=nullptr)
{
p = p->nextarc;
}
p->nextarc = tmparc;
p->nextarc->nextarc = nullptr;
G.arcnum++;
}
j++;
}
}
//һ<><D2BB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
} //whileѭ<65><D1AD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
fclose(fp);
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>ɹ<EFBFBD>\n");
return true;
}
bool First = true;
void DFS(Graph &G, int v0, vector<City>& city)
{
if (First)
{
printf("%s", city[v0].city);
First = false;
}
else
{
printf("->%s", city[v0].city);
}
city[v0].pass = true;
int v;
ArcNode* p = G.vertices[v0].firstArc;
while (p != nullptr)
{
v = p->adjvex;
if (city[v].pass == false)
{
DFS(G, v, city);
}
p = p->nextarc;
}
}
void BFS(Graph& G, int v0, vector<City>& city)
{
int w;
ArcNode* p=nullptr;
queue<int> qu; //<2F><><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6><EFBFBD>ָ<EFBFBD><D6B8>
printf("%s",city[v0].city); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
city[v0].pass = true; //<2F><><EFBFBD>ѷ<EFBFBD><D1B7>ʱ<EFBFBD><CAB1><EFBFBD>
qu.push(v0);
while (!qu.empty()) //<2F>Ӳ<EFBFBD><D3B2><EFBFBD>ѭ<EFBFBD><D1AD>
{
w=qu.front(); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>w
qu.pop();
p = G.vertices[w].firstArc; //ָ<><D6B8>w<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڽӵ<DABD>
while (p != nullptr) //<2F><><EFBFBD><EFBFBD>w<EFBFBD><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽӵ<DABD>
{
int v = p->adjvex;
if (city[v].pass == false) //<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD>ڽӵ<DABD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("->%s",city[v].city); //<2F><><EFBFBD>ʸ<EFBFBD><CAB8>ڽӵ<DABD>
city[v].pass = true; //<2F><><EFBFBD>ѷ<EFBFBD><D1B7>ʱ<EFBFBD><CAB1><EFBFBD>
qu.push(v); //<2F>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
p = p->nextarc; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڽӵ<DABD>
}
}
printf("\n");
}
double GetWeight(Graph &G, int v0, int v, char kind)
{ //<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>v0<76><30>v<EFBFBD>ıߵ<C4B1>Ȩ<EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><47><CEAA><EFBFBD>õ<EFBFBD>ͼ
//v0Ϊ<30><CEAA><EFBFBD>㣬vΪ<76>յ㣬kindΪ'T'ʱ<>򷵻<EFBFBD><F2B7B5BB><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬 Ϊ'M'ʱ<>򷵻<EFBFBD><F2B7B5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>v0<76><30>v<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>һ<EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>򷵻<EFBFBD>Ȩֵ<C8A8><D6B5>С<EFBFBD><D0A1>ֵ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸñߣ<C3B1><DFA3>򷵻<EFBFBD>INFINITY
double min = INFINITY*1.0;//<2F><>Сֵ<D0A1><D6B5>ʼ<EFBFBD><CABC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (kind == 'T')
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
ArcNode *p = G.vertices[v0].firstArc;
while (p!=nullptr) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>V0<56><30><EFBFBD>ڵı<DAB5>Ѱ<EFBFBD><D1B0><EFBFBD>յ<EFBFBD>Ϊv<CEAA><76>
{
if (p->adjvex == v)
{//<2F><><EFBFBD>յ<EFBFBD>Ϊv<CEAA><76><EFBFBD>ж<EFBFBD>Ȩֵ<C8A8>Ƿ<EFBFBD>С<EFBFBD><D0A1>min
if (p->time < min)
min = p->time;
}
p = p->nextarc;
}
return min;
}
else if (kind == 'M')
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ArcNode *p = G.vertices[v0].firstArc;
while( p != nullptr)
{
if (p->adjvex == v)
{//<2F><><EFBFBD>յ<EFBFBD>Ϊv<CEAA><76><EFBFBD>ж<EFBFBD>Ȩֵ<C8A8>Ƿ<EFBFBD>С<EFBFBD><D0A1>min
if (p->money < min)
min = p->money;
}
p = p->nextarc;
}
return min;
}
else
{
printf("kind <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
return 0;
}
}
double GetWeight2(Graph& G, int v0, int v, char Kind,char*kind)
{ //<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>v0<76><30>v<EFBFBD>ıߵ<C4B1>Ȩ<EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><47><CEAA><EFBFBD>õ<EFBFBD>ͼ
//v0Ϊ<30><CEAA><EFBFBD>㣬vΪ<76>յ㣬kindΪ'T'ʱ<>򷵻<EFBFBD><F2B7B5BB><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬 Ϊ'M'ʱ<>򷵻<EFBFBD><F2B7B5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>v0<76><30>v<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>һ<EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>򷵻<EFBFBD>Ȩֵ<C8A8><D6B5>С<EFBFBD><D0A1>ֵ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸñߣ<C3B1><DFA3>򷵻<EFBFBD>INFINITY
double min = INFINITY * 1.0;//<2F><>Сֵ<D0A1><D6B5>ʼ<EFBFBD><CABC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Kind == 'T')
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
ArcNode* p = G.vertices[v0].firstArc;
while (p!= nullptr) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>V0<56><30><EFBFBD>ڵı<DAB5>Ѱ<EFBFBD><D1B0><EFBFBD>յ<EFBFBD>Ϊv<CEAA><76>
{
if (p->adjvex == v&& strcmp(p->kind,kind)==0)
{//<2F><><EFBFBD>յ<EFBFBD>Ϊv<CEAA><76><EFBFBD>ж<EFBFBD>Ȩֵ<C8A8>Ƿ<EFBFBD>С<EFBFBD><D0A1>min
if (p->time < min)
min = p->time;
}
p = p->nextarc;
}
return min;
}
else if (Kind == 'M')
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ArcNode* p = G.vertices[v0].firstArc;
while (p!= nullptr)
{
if (p->adjvex == v&& strcmp(p->kind, kind) == 0)
{//<2F><><EFBFBD>յ<EFBFBD>Ϊv<CEAA><76><EFBFBD>ж<EFBFBD>Ȩֵ<C8A8>Ƿ<EFBFBD>С<EFBFBD><D0A1>min
if (p->money < min)
min = p->money;
}
p = p->nextarc;
}
return min;
}
else
{
printf("kind <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
return 0;
}
}
typedef double ShortPathTable[MAX_VERTEX_NUM];
int Path[MAX_VERTEX_NUM]; //Path[]<5D>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±꣬<C2B1><EAA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3A3AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD>ֵΪ-1
void ShortestPath(Graph &G, int v0, ShortPathTable &D,char kind)
{
//<2F>ú<EFBFBD><C3BA><EFBFBD>ʹ<EFBFBD><CAB9>Dijkstra<72><EFBFBD><E3B7A8><EFBFBD><EFBFBD>ͼG<CDBC><47><EFBFBD><EFBFBD>v0Ϊ<30><CEAA><EFBFBD><EFBFBD><E3B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD><44>
//kindΪ<64><CEAA><EFBFBD><EFBFBD>Ȩֵ<C8A8><D6B5><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>'T'Ϊʱ<CEAA><CAB1>,'M'Ϊ<><CEAA><EFBFBD><EFBFBD>
if (kind != 'T' && kind != 'M')
{
printf("kind <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
return;
}
int v, w, i;
double min;
int final[MAX_VERTEX_NUM]; //final[v]=1 <20><>ʾv0<76><30>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (v = 0; v < G.vexnum; v++)
{//<2F><>ʼ<EFBFBD><CABC>final[]<5D><>D[]<5D><>Path[]
final[v] =0;
D[v] = GetWeight(G, v0, v, kind);
if (D[v] != INFINITY)
{
Path[v] = v0;
}
else
{
Path[v] = -1;
}
}
D[v0] = 0; //<2F><>ʼ<EFBFBD><CABC>D[v0] = 0,<2C><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
final[v0] = 1; //<2F><>ʼ<EFBFBD><CABC>final[v0] = 1
//<2F><>ʼ<EFBFBD><CABC>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v0<76><30>ij<EFBFBD><C4B3>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>final<61><6C>Ϊ1
for (i = 1; i < G.vexnum; i++)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>µ<EFBFBD> G.vexnum - 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
min = INFINITY*1.0;//<2F><>ǰ<EFBFBD><C7B0>֪<EFBFBD><D6AA>v0<76><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (w = 0; w < G.vexnum; w++)
{
if (!final[w] && D[w] < min) //Ѱ<><D1B0>һ<EFBFBD><D2BB>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֱ<EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>ǰ<EFBFBD><C7B0>i+1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>V0<56><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
{
v = w;
min = D[w];
}
//w<><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v0<76><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v
final[v] = 1;//<2F><>v0<76><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><76>final[v]<5D><>Ϊ1
for (w = 0; w < G.vexnum; w++)
{//<2F><><EFBFBD>µ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (final[w]==0 && (min + GetWeight(G, v, w, kind) < D[w])) //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>min<69>Ķ<EFBFBD><C4B6><EFBFBD>V<EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><77>ֵ<EFBFBD><D6B5>һ<EFBFBD><D2BB>ʼ<EFBFBD><CABC>¼<EFBFBD>ĵ<EFBFBD>w<EFBFBD><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>̾<EFBFBD><CCBE><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
{
D[w] = min + GetWeight(G, v, w, kind);
Path[w] = v; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><77><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><76>ֵ
}
}
}
}
void ShortestPath2(Graph& G, int v0, ShortPathTable& D, char Kind,char*kind)
{
//<2F>ú<EFBFBD><C3BA><EFBFBD>ʹ<EFBFBD><CAB9>Dijkstra<72><EFBFBD><E3B7A8><EFBFBD><EFBFBD>ͼG<CDBC><47><EFBFBD><EFBFBD>v0Ϊ<30><CEAA><EFBFBD><EFBFBD><E3B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD><44>
//kindΪ<64><CEAA><EFBFBD><EFBFBD>Ȩֵ<C8A8><D6B5><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>'T'Ϊʱ<CEAA><CAB1>,'M'Ϊ<><CEAA><EFBFBD><EFBFBD>
if (Kind != 'T' && Kind != 'M')
{
printf("Kind <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
return;
}
if (strcmp(kind,"bus")!=0 && strcmp(kind, "plane")!=0 && strcmp(kind, "train")!=0)
{
printf("<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ʽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
return;
}
int v, w, i;
double min;
int final[MAX_VERTEX_NUM]; //final[v]=1 <20><>ʾv0<76><30>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (v = 0; v < G.vexnum; v++)
{//<2F><>ʼ<EFBFBD><CABC>final[]<5D><>D[]<5D><>Path[]
final[v] = 0;
D[v] = GetWeight2(G, v0, v, Kind,kind);
if (D[v] != INFINITY)
{
Path[v] = v0;
}
else
{
Path[v] = -1;
}
}
D[v0] = 0; //<2F><>ʼ<EFBFBD><CABC>D[v0] = 0,<2C><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
final[v0] = 1; //<2F><>ʼ<EFBFBD><CABC>final[v0] = 1
//<2F><>ʼ<EFBFBD><CABC>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v0<76><30>ij<EFBFBD><C4B3>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>final<61><6C>Ϊ1
for (i = 1; i < G.vexnum; i++)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>µ<EFBFBD> G.vexnum - 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
min = INFINITY * 1.0;//<2F><>ǰ<EFBFBD><C7B0>֪<EFBFBD><D6AA>v0<76><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (w = 0; w < G.vexnum; w++)
{
if (!final[w] && D[w] < min) //Ѱ<><D1B0>һ<EFBFBD><D2BB>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֱ<EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>ǰ<EFBFBD><C7B0>i+1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>V0<56><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
{
v = w;
min = D[w];
}
//w<><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v0<76><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v
final[v] = 1;//<2F><>v0<76><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><76>final[v]<5D><>Ϊ1
for (w = 0; w < G.vexnum; w++)
{//<2F><><EFBFBD>µ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (final[w] == 0 && (min + GetWeight2(G, v, w, Kind,kind) < D[w])) //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>min<69>Ķ<EFBFBD><C4B6><EFBFBD>V<EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><77>ֵ<EFBFBD><D6B5>һ<EFBFBD><D2BB>ʼ<EFBFBD><CABC>¼<EFBFBD>ĵ<EFBFBD>w<EFBFBD><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>̾<EFBFBD><CCBE><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
{
D[w] = min + GetWeight2(G, v, w, Kind,kind);
Path[w] = v; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><77><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><76>ֵ
}
}
}
}
void GetArc(Graph& graph, int w1, int w2, ArcNode& arc, char kind) //Ѱ<><D1B0>w1<77><31>w2<77>ıߴ浽arc<72><63>
{
double min = INFINITY * 1.0;//<2F><>Сֵ<D0A1><D6B5>ʼ<EFBFBD><CABC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (kind == 'T')
{
ArcNode* p = graph.vertices[w1].firstArc;
while (p != nullptr) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>w1<77><31><EFBFBD>ڵı<DAB5>Ѱ<EFBFBD><D1B0><EFBFBD>յ<EFBFBD>Ϊw2<77><32>
{
if (p->adjvex == w2)
{//<2F><><EFBFBD>յ<EFBFBD>Ϊw2<77><32><EFBFBD>ж<EFBFBD>Ȩֵ<C8A8>Ƿ<EFBFBD>С<EFBFBD><D0A1>min
if (p->time < min)
{
min = p->time;
arc = *p;
}
}
p = p->nextarc;
}
}
else if (kind == 'M')
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ArcNode* p = graph.vertices[w1].firstArc;
while (p != nullptr)
{
if (p->adjvex == w2)
{//<2F><><EFBFBD>յ<EFBFBD>Ϊv<CEAA><76><EFBFBD>ж<EFBFBD>Ȩֵ<C8A8>Ƿ<EFBFBD>С<EFBFBD><D0A1>min
if (p->money < min)
{
min = p->money;
arc = *p;
}
}
p = p->nextarc;
}
}
}
void GetArc2(Graph& graph, int w1, int w2, ArcNode& arc, char Kind,char*kind) //Ѱ<><D1B0>w1<77><31>w2<77><32>kind<6E><64>ͨ<EFBFBD><CDA8>ʽ<EFBFBD>ıߴ浽arc<72><63>
{
double min = INFINITY * 1.0;//<2F><>Сֵ<D0A1><D6B5>ʼ<EFBFBD><CABC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Kind == 'T')
{
ArcNode* p = graph.vertices[w1].firstArc;
while (p != nullptr) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>w1<77><31><EFBFBD>ڵı<DAB5>Ѱ<EFBFBD><D1B0><EFBFBD>յ<EFBFBD>Ϊw2<77><32>
{
if (p->adjvex == w2&&strcmp(p->kind,kind)==0)
{//<2F><><EFBFBD>յ<EFBFBD>Ϊw2<77><32><EFBFBD>ж<EFBFBD>Ȩֵ<C8A8>Ƿ<EFBFBD>С<EFBFBD><D0A1>min
if (p->time < min)
{
min = p->time;
arc = *p;
}
}
p = p->nextarc;
}
}
else if (Kind == 'M')
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ArcNode* p = graph.vertices[w1].firstArc;
while (p != nullptr)
{
if (p->adjvex == w2 && strcmp(p->kind, kind) == 0)
{//<2F><><EFBFBD>յ<EFBFBD>Ϊv<CEAA><76><EFBFBD>ж<EFBFBD>Ȩֵ<C8A8>Ƿ<EFBFBD>С<EFBFBD><D0A1>min
if (p->money < min)
{
min = p->money;
arc = *p;
}
}
p = p->nextarc;
}
}
}
bool createhtml(Graph&graph,char*start,char*des,int v,char kind)
{
FILE* fp = nullptr;
fopen_s(&fp, "tmp.html", "wt");
if (!fp)
{
printf("Cannot open the file:tmp.html\n");
return false;
}
fprintf(fp, "<!DOCTYPE html><html><head><style type='text/css'>body, html{width: 100%%;height: 100%%;margin:0;font-family:'΢<><CEA2><EFBFBD>ź<EFBFBD> ';}#allmap{height:100%%;width:100%%;}#r-result{width:100%%;}</style><script type='text/javascript' src='http://api.map.baidu.com/api?v=2.0&ak=nSxiPohfziUaCuONe4ViUP2N'></script><title>Shortest path from %s to %s</title></head><body><div id='allmap'></div></div></body></html><script type='text/javascript'>var map = new BMap.Map('allmap');var point = new BMap.Point(0, 0);map.centerAndZoom(point, 2);map.enableScrollWheelZoom(true);", start, des);
//<2F><><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
stack<int>q;//<2F><><EFBFBD><EFBFBD>Path[]<5D><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B4A2><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±꣬<C2B1><EAA3AC><EFBFBD>½<EFBFBD>һ<EFBFBD><D2BB>ջ<EFBFBD><D5BB>ջ<EFBFBD><D5BB>Ϊ<EFBFBD>յ㣬ջ<E3A3AC><D5BB>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
int w = v;//<2F>յ<EFBFBD>
while (Path[w] != -1)
{
q.push(w);
w = Path[w];
}
q.push(w); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ջ<EFBFBD><D5BB>
int j = 0;
while (q.size() != 1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ-1
{
int w1 = q.top();//<2F><>j<EFBFBD>αߵĿ<DFB5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> //j=0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
q.pop();
int w2 = q.top(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ArcNode arc;
GetArc(graph, w1, w2, arc, kind);
fprintf(fp, "var marker%d = new BMap.Marker(new BMap.Point(%.4lf, %.4lf));map.addOverlay(marker%d);\n", j, graph.vertices[w1].data.longitude, graph.vertices[w1].data.latitude, j);
fprintf(fp, "var infoWindow%d = new BMap.InfoWindow(\"<p style = 'fontsize:14px;'>country: %s<br/>city : %s</p>\");marker%d.addEventListener(\"click\", function(){this.openInfoWindow(infoWindow%d);}); var marker%d = new BMap.Marker(new BMap.Point(%.4f, %.4f));map.addOverlay(marker%d);\n", j, graph.vertices[w1].data.country, graph.vertices[w1].data.city, j, j, j + 1, graph.vertices[w2].data.longitude, graph.vertices[w2].data.latitude, j + 1);
fprintf(fp, "var infoWindow%d = new BMap.InfoWindow(\"<p style = 'fontsize:14px;'>country: %s<br/>city : %s</p>\");marker%d.addEventListener(\"click\", function(){this.openInfoWindow(infoWindow%d);}); var contentString%.2d = '%s, %s --> %s, %s (%s - %.2f hours - $%.2f - %s)';var path%d = new BMap.Polyline([new BMap.Point(%.4f, %.4f),new BMap.Point(%.4f, %.4f)], {strokeColor:'#25a45b', strokeWeight:8, strokeOpacity:0.8});map.addOverlay(path%d);path%d.addEventListener(\"click\", function(){alert(contentString%.2d);});", j + 1, graph.vertices[w2].data.country, graph.vertices[w2].data.city, j + 1, j + 1, j + 1, graph.vertices[w1].data.city, graph.vertices[w1].data.country, graph.vertices[w2].data.city, graph.vertices[w2].data.country, arc.kind, arc.time, arc.money, arc.info, j + 1, graph.vertices[w1].data.longitude, graph.vertices[w1].data.latitude, graph.vertices[w2].data.longitude, graph.vertices[w2].data.latitude, j + 1, j + 1, j + 1);
j++;
}
fprintf(fp, "</script>");
fclose(fp);
return true;
}
void help()
{
printf("**************\n");
printf("/*<2A>˵<EFBFBD>*/\n");
printf("1.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>\n");
printf("2.<2E><EFBFBD><E6B6A8>ͨ<EFBFBD><CDA8>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>\n");
printf("3.<2E><>DFS·<53><C2B7>\n");
printf("4.<2E><>BFS·<53><C2B7>\n");
printf("5.help\n");
printf("6.exit\n");
printf("**************\n");
}
void outputDist(int v, ShortPathTable& D, char kind)
{
if (kind == 'T')
{
printf("The shortest time is: %.2lf\n ", D[v]);
}
else if (kind == 'M')
{
printf("The shortest money is: %.2lf\n", D[v]);
}
}
void outputPATH(int v, Graph& graph)
{
stack<int>q;//<2F><><EFBFBD><EFBFBD>Path[]<5D><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B4A2><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±꣬<C2B1><EAA3AC><EFBFBD>½<EFBFBD>һ<EFBFBD><D2BB>ջ<EFBFBD><D5BB>ջ<EFBFBD><D5BB>Ϊ<EFBFBD>յ㣬ջ<E3A3AC><D5BB>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
int w = v;//<2F>յ<EFBFBD>
while (Path[w] != -1)
{
q.push(w);
w = Path[w];
}
q.push(w); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ջ<EFBFBD><D5BB>
int first = 1;
while (q.size() != 0)
{
int tmpw = q.top();//<2F><>j<EFBFBD>αߵĿ<DFB5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> //j=0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
q.pop();
if (first)
{
printf("%s", &graph.vertices[tmpw].data.city);
first = 0;
}
else
{
printf("->%s", &graph.vertices[tmpw].data.city);
}
}
printf("\n");
}
void output(int v, Graph& graph, char kind)
{
stack<int>q;//<2F><><EFBFBD><EFBFBD>Path[]<5D><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B4A2><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±꣬<C2B1><EAA3AC><EFBFBD>½<EFBFBD>һ<EFBFBD><D2BB>ջ<EFBFBD><D5BB>ջ<EFBFBD><D5BB>Ϊ<EFBFBD>յ㣬ջ<E3A3AC><D5BB>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
int w = v;//<2F>յ<EFBFBD>
while (Path[w] != -1)
{
q.push(w);
w = Path[w];
}
q.push(w); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ջ<EFBFBD><D5BB>
while (q.size() != 1)
{
int w1 = q.top();//<2F><>j<EFBFBD>αߵĿ<DFB5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> //j=0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
q.pop();
int w2=q.top();
ArcNode arc;
GetArc(graph, w1, w2, arc, kind);
printf("%s->%s\n", graph.vertices[w1].data.city,graph.vertices[w2].data.city);
printf("Money<EFBFBD><EFBFBD>%.2lf\n", arc.money);
printf("Time: %.2lf\n", arc.time);
printf("Means of Transportation<6F><6E>%s\n", arc.kind);
printf("\n");
}
}
void output2(int v, Graph& graph, char Kind,char* kind)
{
stack<int>q;//<2F><><EFBFBD><EFBFBD>Path[]<5D><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B4A2><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±꣬<C2B1><EAA3AC><EFBFBD>½<EFBFBD>һ<EFBFBD><D2BB>ջ<EFBFBD><D5BB>ջ<EFBFBD><D5BB>Ϊ<EFBFBD>յ㣬ջ<E3A3AC><D5BB>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
int w = v;//<2F>յ<EFBFBD>
while (Path[w] != -1)
{
q.push(w);
w = Path[w];
}
q.push(w); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ջ<EFBFBD><D5BB>
while (q.size() != 1)
{
int w1 = q.top();//<2F><>j<EFBFBD>αߵĿ<DFB5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> //j=0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
q.pop();
int w2 = q.top();
ArcNode arc;
GetArc2(graph, w1, w2, arc, Kind,kind);
printf("%s->%s\n", graph.vertices[w1].data.city, graph.vertices[w2].data.city);
printf("Money<EFBFBD><EFBFBD>%.2lf\n", arc.money);
printf("Time: %.2lf\n", arc.time);
printf("Means of Transportation<6F><6E>%s\n", arc.kind);
printf("\n");
}
}
int main()
{
vector<City> city;
Graph graph;
ShortPathTable Dist;
char start[32] = { 0 };//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char des[32] = { 0 }; //Ŀ<>ĵ<EFBFBD>
char Kind;//ѡ<><D1A1><EFBFBD><EFBFBD>Ȩֵ<C8A8><D6B5><EFBFBD><EFBFBD>,<2C><>T<EFBFBD><54>Ϊʱ<CEAA><EFBFBD><E4A3AC>M<EFBFBD><4D>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
char kind[6] = "\0";
CreateCities("cities.csv", city);
CreateGraph("routes.csv", graph, city);
help();
while (true)
{
int flag;
printf("\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>");
scanf_s("%d", &flag);
switch (flag)
{
case 1:
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:");
scanf_s("%s", &start, 32);
char c = getchar();//<2F><>ȥ<EFBFBD><C8A5><EFBFBD>з<EFBFBD>
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:");
scanf_s("%s", &des, 32);
c = getchar();
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>money<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>time<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>T:");
scanf_s("%c", &Kind, 1);
int v0 = SearchCity(start, city);//v0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>
int v = SearchCity(des, city);//vΪ<76>յ<EFBFBD><D5B5>±<EFBFBD>
Timer t;
t.Start();
ShortestPath(graph, v0, Dist, Kind);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
t.Stop();
printf(" Time elapsed is : %lf (ms). \n ", t.ElapsedTime());
printf("The shortest path from %s to %s is:\n", start, des);
outputPATH(v, graph);
outputDist(v, Dist, Kind);
printf("<EFBFBD>Ƿ<EFBFBD><EFBFBD>鿴ÿ<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>Y or N<><4E>");
c = getchar();
char option='O';
scanf_s("%c", &option, 1);
if (option == 'Y')
{
output(v, graph, Kind);
}
while (option != 'Y' && option != 'N')
{
printf("<EFBFBD>Ƿ<EFBFBD><EFBFBD>鿴ÿ<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>Y or N<><4E>");
c = getchar();
scanf_s("%c", &option, 1);
if (option == 'Y')
{
output(v, graph, Kind);
}
}
if (createhtml(graph, start, des, v, Kind))
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>\n");
ShellExecuteA(NULL, "open", "chrome.exe", "tmp.html", NULL, SW_SHOWNORMAL);
}
}break;
case 2:
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:");
scanf_s("%s", &start, 32);
char c = getchar();//<2F><>ȥ<EFBFBD><C8A5><EFBFBD>з<EFBFBD>
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:");
scanf_s("%s", &des, 32);
c = getchar();
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>money<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>time<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>T:");
scanf_s("%c", &Kind, 1);
c = getchar();
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뽻ͨ<EFBFBD><EFBFBD>ʽ:");
scanf_s("%s", &kind, 6);
int v0 = SearchCity(start, city);//v0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>
int v = SearchCity(des, city);//vΪ<76>յ<EFBFBD><D5B5>±<EFBFBD>
Timer t;
t.Start();
ShortestPath2(graph, v0, Dist, Kind, kind);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
t.Stop();
printf(" Time elapsed is : %lf (ms). \n ", t.ElapsedTime());
printf("The shortest path from %s to %s is:\n", start, des);
outputPATH(v, graph);
outputDist(v, Dist, Kind);
printf("<EFBFBD>Ƿ<EFBFBD><EFBFBD>鿴ÿ<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>Y or N<><4E>");
c = getchar();
char option = 'O';
scanf_s("%c", &option, 1);
if (option == 'Y')
{
output2(v, graph, Kind, kind);
}
while (option != 'Y' && option != 'N')
{
printf("<EFBFBD>Ƿ<EFBFBD><EFBFBD>鿴ÿ<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>Y or N<><4E>");
c = getchar();
scanf_s("%c", &option, 1);
if (option == 'Y')
{
output2(v, graph, Kind, kind);
}
}
if (createhtml(graph, start, des, v, Kind))
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>\n");
ShellExecuteA(NULL, "open", "chrome.exe", "tmp.html", NULL, SW_SHOWNORMAL);
}
}break;
case 3:
{
for (int i = 0; i <int(city.size()); i++)
{
city[i].pass = false;
}
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:");
scanf_s("%s", &start, 32);
int v0 = SearchCity(start, city);//v0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>
Timer t;
t.Start();
DFS(graph, v0, city);
t.Stop();
printf("\n Time elapsed is : %lf (ms). \n ", t.ElapsedTime());
}break;
case 4:
{
for (int i=0;i<int(city.size());i++)
{
city[i].pass = false;
}
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:");
scanf_s("%s", &start, 32);
int v0 = SearchCity(start, city);//v0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>
Timer t;
t.Start();
BFS(graph, v0, city);
t.Stop();
printf("\n Time elapsed is : %lf (ms). \n ", t.ElapsedTime());
}break;
case 5:
{
help();
}break;
case 6: {
return 0;
}break;
default:
break;
}
}
return 0;
}