first commit
This commit is contained in:
40
Timer.h
Normal file
40
Timer.h
Normal 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
199
cities.csv
Normal 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
|
||||
|
1975
routes.csv
Normal file
1975
routes.csv
Normal file
File diff suppressed because it is too large
Load Diff
5
tmp.html
Normal file
5
tmp.html
Normal 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>
|
||||
31
数据结构实习-最短路径.sln
Normal file
31
数据结构实习-最短路径.sln
Normal 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
|
||||
139
数据结构实习-最短路径.vcxproj
Normal file
139
数据结构实习-最短路径.vcxproj
Normal 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>
|
||||
30
数据结构实习-最短路径.vcxproj.filters
Normal file
30
数据结构实习-最短路径.vcxproj.filters
Normal 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>
|
||||
4
数据结构实习-最短路径.vcxproj.user
Normal file
4
数据结构实习-最短路径.vcxproj.user
Normal 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
897
源.cpp
Normal 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>GΪ<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>GΪ<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>w·<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>w·<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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user