資源簡介
本代碼為2007年數學建模B題,乘公交看奧運代碼文件。包含了搜索法和Dij兩種算法,注釋詳細,還有一個GUI窗口
代碼片段和文件信息
function?[Line?LineSta]?=?GetData(??)
%本函數用于讀取txt文本
%最后的OUTPUT中包含Line和LineSta
%Line由n個元胞構成,每個元胞中包含了:車輛編號、收費模式(分段計價為1、單一票制為2)、線路類型、路徑
%Line由n個元胞構成,每個元胞代表一條線路,每個double變量表示一個站點
TxtRead?=?fopen(‘附件\1.1?公汽線路信息.txt‘?‘r‘);?%以二進制的格式讀取TXT文本
Num?=?1;?%計數標識
while?1??%這里開始循環,一排一排的來讀取TXT文本中的順序
????NewLine?=?fgetl(TxtRead);?%NewLine為讀取的新一行的數據
?
????if?~ischar(NewLine)
????????break;%如果讀取到異常字符即停止
????end
????if?strcmp(NewLine‘END‘)
????????break;%如果讀到末位行即停止
????end
????if?strcmp(NewLine?‘‘)
????????continue;%如果讀到空白行,就舍棄
????end
????
????
????if?strcmp(NewLine(1)?‘L‘)
????????LineNum?=?NewLine;%如果讀取到的行為線路名,即做標記
????????continue
????end
????
????
????if?strcmp(NewLine?‘分段計價。‘)%如果讀取到的是定價方式,就做標記
????????Fee_Bus?=?1;
????????continue
????elseif?strcmp(NewLine?‘單一票制1元。‘)
????????Fee_Bus?=?2;
????????continue
????end
????
????if?strcmp(NewLine(1:3)?‘上行:‘)?%統計每條線路的信息,并存儲到元胞Line中
????????Line{Num?1}?=?LineNum;
????????Line{Num?2}?=?Fee_Bus;
????????Line{Num?3}?=?‘上行‘;
????????Line{Num?4}?=?NewLine(4:end);
????????Num?=?Num?+?1;
????????continue
????elseif?strcmp(NewLine(1:3)?‘下行:‘)
????????Line{Num?1}?=?LineNum;
????????Line{Num?2}?=?Fee_Bus;
????????Line{Num?3}?=?‘下行‘;
????????Line{Num?4}?=?NewLine(4:end);
????????Num?=?Num?+?1;
????????continue
????elseif?strcmp(NewLine(1:3)?‘環行:‘)%環形線這個地方的處理需要注意,分成了順時針和逆時針兩條線
????????Line{Num?1}?=?LineNum;
????????Line{Num?2}?=?Fee_Bus;
????????Line{Num?3}?=?‘環順‘;
????????Line{Num?4}?=?strcat(NewLine(4:end)?NewLine(10:end));
????????Num?=?Num?+?1;
????????Line{Num?1}?=?LineNum;
????????Line{Num?2}?=?Fee_Bus;
????????Line{Num?3}?=?‘環逆‘;
????????Line{Num?4}?=?strcat(NewLine(4:end)?NewLine(10:end));%由于格式的特殊性,這里不能直接把逆環寫出來,需要在下方進行數據處理時再進行倒序
????????Num?=?Num?+?1;
????????continue
????elseif?strcmp(NewLine(1)?‘S‘)%如果這個地方上行線和下行線相同,則同樣需要分割為2條線路
????????Line{Num?1}?=?LineNum;
????????Line{Num?2}?=?Fee_Bus;
????????Line{Num?3}?=?‘上行_同‘;
????????Line{Num?4}?=?NewLine;
????????Num?=?Num?+?1;
????????Line{Num?1}?=?LineNum;
????????Line{Num?2}?=?Fee_Bus;
????????Line{Num?3}?=?‘下行_同‘;
????????Line{Num?4}?=?NewLine;%由于格式的特殊性,這里不能直接把下行寫出來,需要在下方進行數據處理時再進行倒序
????????Num?=?Num?+?1;
????????continue
????end
end
%至此已經把TXT文本中的數據統計完畢,
%接著需要查找每條線路的站點個數并進行統計
%同時需要將環形和上行線下行線相同的線路進行處理
for?i?=?1:?size(Line?1)
????LineStep?=?Line{i?4};%將每條線路存儲進LineStep
????StaNum_Loc?=?findstr(LineStep?‘S‘);%這里findstr函數存儲的每個值代表S的每個位置,長度即為站點個數
????Sta?=?zeros(1?length(StaNum_Loc));
????if?strcmp(Line{i?3}?‘環逆‘)?||?strcmp(Line{i?3}?‘下行_同‘)?%如果是環逆和下行_同,則需要在二次統計時進行逆序統計
????????for?j?=?length(StaNum_Loc)?:?-1?:?1
????????????Sta(length(StaNum_Loc)?-?j?+?1)?=?str2double(LineStep((StaNum_Loc(j)?+?1):(StaNum_Loc(j)?+?4)));
????????end
????else
????????for?j?=?1:length(StaNum_Loc)
????????????Sta(j)?=?str2double(LineStep((StaNum_Loc(j)?+?1):(StaNum_Loc(j)?+?4)));
????????end
????end
????LineSta{i}?=?Sta;
end
????
fclose(TxtRead);%關閉文件
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????128??2018-08-24?17:39??CODE\ReadMe.txt
?????文件????????504??2018-08-25?23:56??CODE\第一問代碼\Dijkstra\Dijkstra.m
?????文件??????74235??2018-08-25?18:37??CODE\第一問代碼\Dijkstra\Line.mat
?????文件???13119881??2018-08-25?18:39??CODE\第一問代碼\Dijkstra\LineMat.mat
?????文件?????246679??2018-08-25?18:39??CODE\第一問代碼\Dijkstra\LineNum.mat
?????文件??????55735??2018-08-25?18:39??CODE\第一問代碼\Dijkstra\LineSta.mat
?????文件????1028341??2018-08-25?18:39??CODE\第一問代碼\Dijkstra\MinDisMat.mat
?????文件?????615726??2018-08-25?23:36??CODE\第一問代碼\Dijkstra\MinDisMat_mon.mat
?????文件?????????72??2018-08-27?00:37??CODE\第一問代碼\Dijkstra\ReadMe.txt
?????文件???????3521??2018-08-25?01:12??CODE\第一問代碼\GetData.m
?????文件???????2600??2018-08-25?23:36??CODE\第一問代碼\GetMat.m
?????文件????????656??2018-08-25?23:36??CODE\第一問代碼\GetMinMat.m
?????文件????????609??2018-08-26?17:05??CODE\第一問代碼\LineSys_Main.m
?????文件????????305??2018-08-26?17:44??CODE\第一問代碼\NoCh.m
?????文件???????2249??2018-08-25?19:21??CODE\第一問代碼\OneCh.m
?????文件?????????91??2018-08-26?21:16??CODE\第一問代碼\ReadMe.txt
?????文件????????302??2018-08-27?13:42??CODE\第一問代碼\test.m
?????文件???????2997??2018-08-25?19:19??CODE\第一問代碼\TwoCh.m
?????文件????????618??2007-09-11?11:31??CODE\第一問代碼\附件\1?公汽和地鐵線路信息數據文件格式說明.txt
?????文件?????182811??2018-08-24?17:37??CODE\第一問代碼\附件\1.1?公汽線路信息.txt
?????文件????????263??2007-08-23?03:05??CODE\第一問代碼\附件\1.2?地鐵線路信息.txt
?????文件????????197??2007-09-12?11:53??CODE\第一問代碼\附件\2?地鐵換乘公汽信息數據文件格式說明.txt
?????文件????????570??2007-08-23?04:23??CODE\第一問代碼\附件\2.1?地鐵T1線換乘公汽信息.txt
?????文件????????475??2007-08-23?04:23??CODE\第一問代碼\附件\2.2?地鐵T2線換乘公汽信息.txt
?????文件???????2127??2018-08-26?13:49??CODE\第二問代碼\Dijkstra\Dijkstra.m
?????文件????????745??2018-08-25?21:54??CODE\第二問代碼\Dijkstra\DInfo.mat
?????文件???14378179??2018-08-25?21:55??CODE\第二問代碼\Dijkstra\LineMat_sub.mat
?????文件?????689415??2018-08-25?21:56??CODE\第二問代碼\Dijkstra\LineNum_sub.mat
?????文件??????55920??2018-08-25?21:56??CODE\第二問代碼\Dijkstra\LineSta_sub.mat
?????文件??????73544??2018-08-25?21:54??CODE\第二問代碼\Dijkstra\Line_sub.mat
............此處省略42個文件信息
評論
共有 條評論