资源简介

本代码为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个文件信息

评论

共有 条评论