【数学建模集训系列】公交查询系统的matlab实现-只含公交的查询
2011-08-17 17:48
751 查看
clear startP=input('请输入起点:'); endP=input('请输入终点:'); tic load SSdata_con; %load SSdata_tim; %load SSdata_L; %load SSdata_mon; load SLdata_sl; disp('------------------------------直达--------------------------------------') direct=0; result_mat=[]; %----------- for i=1:520 if SLmat1(startP,i,1)>0&&SLmat1(endP,i,1)>0&&(SLmat1(endP,i,1)-SLmat1(startP,i,1)>0) distance=SLmat1(endP,i,1)-SLmat1(startP,i,1); money=calc_money(i,distance); time=distance*3; %direct=strvcat(direct,num2str(i)); direct=1; result=[i distance 0 money time]; result_mat=[result_mat(:,:);result(1,:)]; %disp(['可通过L' num2str(i) '经过' num2str(distance) '个站点上行直达----价格:' num2str(money) '----时间:' num2str(time)]) end if SLmat1(startP,i,2)>0&&SLmat1(endP,i,2)>0&&(SLmat1(endP,i,2)-SLmat1(startP,i,2)>0) distance=SLmat1(endP,i,2)-SLmat1(startP,i,2); money=calc_money(i,distance); time=distance*3; %direct=strvcat(direct,num2str(i)); direct=1; result=[i distance 1 money time]; result_mat=[result_mat(:,:);result(1,:)]; %disp(['可通过L' num2str(i) '经过' num2str(distance) '个站点下行直达----价格:' num2str(money) '----时间:' num2str(time)]) end end if size(result_mat,1)~=0 money_sort=sortrows(result_mat,4);%按钱排序 time_sort=sortrows(result_mat,5);%按时间排序 disp('按价格排序的最佳路线') if size(money_sort,1)<3 hang=size(money_sort,1); else hang=3; end for i=1:hang if money_sort(i,3)==0 disp(['可通过L' num2str(money_sort(i,1)) '经过' num2str(money_sort(i,2)) '个站点上行直达----价格:' num2str(money_sort(i,4)) '----时间:' num2str(money_sort(i,5))]) elseif money_sort(i,3)==1 disp(['可通过L' num2str(money_sort(i,1)) '经过' num2str(money_sort(i,2)) '个站点下行直达----价格:' num2str(money_sort(i,4)) '----时间:' num2str(money_sort(i,5))]) end end disp('按时间排序的最佳路线') for i=1:hang if time_sort(i,3)==0 disp(['可通过L' num2str(time_sort(i,1)) '经过' num2str(time_sort(i,2)) '个站点上行直达----价格:' num2str(time_sort(i,4)) '----时间:' num2str(time_sort(i,5))]) elseif time_sort(i,3)==1 disp(['可通过L' num2str(time_sort(i,1)) '经过' num2str(time_sort(i,2)) '个站点下行直达----价格:' num2str(time_sort(i,4)) '----时间:' num2str(time_sort(i,5))]) end end end if direct==0 disp('没有直达的车'); end disp('-----------------------------换乘一次-----------------------------------') result_mat1=[];result_mat2=[]; result2=[];result11=[];direct1=0; for i=1:3957 if SS_matrix_con(startP,i)==1&&SS_matrix_con(i,endP)==1 direct1=1; %disp('In') for j1=1:520 for k=1:2 if SLmat1(startP,j1,k)>0&&SLmat1(i,j1,k)>0&&SLmat1(i,j1,k)-SLmat1(startP,j1,k)>0 %disp(num2str(j1)) distance1=SLmat1(i,j1,k)-SLmat1(startP,j1,k); money1=calc_money(j1,distance1); time1=distance1*3; result10=[j1 distance1 k money1 time1 i]; result_mat1=[result_mat1(:,:);result10]; %disp('A') end end end %size( result_mat1) %disp('q') %result_mat1 for j2=1:520 for k=1:2 %disp('B') if SLmat1(i,j2,k)>0&&SLmat1(endP,j2,k)>0&&(SLmat1(endP,j2,k)-SLmat1(i,j2,k)>0) %disp('B') distance2=SLmat1(endP,j2,k)-SLmat1(i,j2,k); money2=calc_money(j2,distance2); time2=distance2*3; result11=[j2 distance2 k money2 time2]; result_mat2=[result_mat2(:,:);result11]; %result_mat2 end end end %size( result_mat2) %disp_str=(['先通过L' num2str(j) '经过' num2str(distance) '个站点上行到S' num2str(i) ','] ); for m=1:size(result_mat1,1) for n=1:size(result_mat2,1) result12=[result_mat1(m,:) result_mat2(n,:)]; result2=[result2;result12]; end end %result2 end result_mat1=[];result_mat2=[];%重要的一句 end if direct1~=0 result_disp=[result2(:,:),result2(:,4)+result2(:,10),result2(:,5)+result2(:,11)+5]; %---------------------------------------- if size(result_disp,1)~=0 money_sort=sortrows(result_disp,12);%按钱排序 time_sort=sortrows(result_disp,13);%按时间排序 if size(money_sort,1)<5 hang=size(money_sort,1); else hang=5; end disp('按价格排序的最佳路线') for i=1:hang if money_sort(i,3)==1 w1=['上行']; else w1=['下行']; end if money_sort(i,9)==1 w2=['上行']; else w2=['下行']; end disp(['先通过L' num2str(money_sort(i,1)) '经过' num2str(money_sort(i,2)) '个站点' w1 '到S' num2str(money_sort(i,6)) ',再通过L' num2str(money_sort(i,7)) '经过' num2str(money_sort(i,8)) '个站点' w2 '到终点----费用:' num2str(money_sort(i,12)) '----时间:' num2str(money_sort(i,13))]) end disp('按时间排序的最佳路线') for i=1:hang if time_sort(i,3)==1 w1=['上行']; else w1=['下行']; end if time_sort(i,9)==1 w2=['上行']; else w2=['下行']; end disp(['先通过L' num2str(time_sort(i,1)) '经过' num2str(time_sort(i,2)) '个站点' w1 '到S' num2str(time_sort(i,6)) ',再通过L' num2str(time_sort(i,7)) '经过' num2str(time_sort(i,8)) '个站点' w2 '到终点----费用:' num2str(time_sort(i,12)) '----时间:' num2str(time_sort(i,13))]) end end else disp('不能换乘一次') end disp('-----------------------------换乘两次-----------------------------------') result2_mat1=[];result2_mat2=[];result2_mat3=[]; result3=[];result31=[]; for i=1:3957 for j=1:3957 if SS_matrix_con(startP,i)==1&&SS_matrix_con(i,j)&&SS_matrix_con(j,endP)==1 %第一个换乘点 for k=1:520 for m=1:2 if SLmat1(startP,k,m)>0&&SLmat1(i,k,m)>0&&(SLmat1(i,k,m)-SLmat1(startP,k,m)>0) distance1=SLmat1(i,k,m)-SLmat1(startP,k,m); money1=calc_money(k,distance1); time1=distance1*3; result20=[k distance1 m money1 time1 i]; result2_mat1=[result2_mat1(:,:);result20]; %disp_str=(['先通过L' num2str(k) '经过' num2str(distance) '个站点上行到S' num2str(i) ','] ); end end end %第二个换乘点 for k=1:520 for m=1:2 if SLmat1(i,k,m)>0&&SLmat1(j,k,m)>0&&(SLmat1(j,k,m)-SLmat1(i,k,m)>0) distance2=SLmat1(j,k,m)-SLmat1(i,k,m); money2=calc_money(k,distance2); time2=distance2*3; result21=[k distance2 m money2 time2 j]; result2_mat2=[result2_mat2(:,:);result21]; %disp_str=([disp_str '再在S' num2str(i) '通过L' num2str(k) '经过' num2str(distance) '个站点上行到S' num2str(j) ',']) ; end end end %第三个换乘点 for k=1:520 for m=1:2 if SLmat1(endP,k,m)>0&&SLmat1(j,k,m)>0&&(SLmat1(endP,k,m)-SLmat1(j,k,m)>0) distance3=SLmat1(endP,k,m)-SLmat1(j,k,m); money3=calc_money(k,distance3); time3=distance3*3; result22=[k distance3 m money3 time3]; result2_mat3=[result2_mat3(:,:);result22]; %disp([disp_str '再在S' num2str(j) '通过L' num2str(k) '经过' num2str(distance) '个站点上行到终点' '----价格:' num2str(money) '----时间:' num2str(time)]) end end end %拼接矩阵 if size(result2_mat1,1)~=0&&size(result2_mat2,1)~=0&&size(result2_mat3,1)~=0 for m1=1:size(result2_mat1,1) for n1=1:size(result2_mat2,1) for k1=1:size(result2_mat3,1) result22=[result2_mat2(n1,:) result2_mat3(k1,:)]; result31=[result2_mat1(m1,:) result22]; result3=[result3(:,:);result31]; end end end end end result2_mat2=[];result2_mat3=[]; result2_mat1=[]; end end result2_disp=[result3(:,:),result3(:,4)+result3(:,10)+result3(:,16),result3(:,5)+result3(:,11)+result3(:,17)+10]; if size(result2_disp,1)~=0 money_sort=sortrows(result2_disp,18);%按钱排序 time_sort=sortrows(result2_disp,19);%按时间排序 if size(money_sort,1)<5 hang=size(money_sort,1); else hang=5; end disp('按价格排序的最佳路线') for i=1:hang if money_sort(i,3)==1 w1=['上行']; else w1=['下行']; end if money_sort(i,9)==1 w2=['上行']; else w2=['下行']; end if money_sort(i,15)==1 w3=['上行']; else w3=['下行']; end disp(['先通过L' num2str(money_sort(i,1)) '经过' num2str(money_sort(i,2)) '个站点' w1 '到S' num2str(money_sort(i,6)) ',再通过L' num2str(money_sort(i,7)) '经过' num2str(money_sort(i,8)) '个站点' w2 '到S' num2str(money_sort(i,12)) ',再通过L' num2str(money_sort(i,13)) '经过' num2str(money_sort(i,14)) '个站点' w3 '到终点----费用:' num2str(money_sort(i,18)) '----时间:' num2str(money_sort(i,19))]) end disp('按时间排序的最佳路线') for i=1:hang if time_sort(i,3)==1 w1=['上行']; else w1=['下行']; end if time_sort(i,9)==1 w2=['上行']; else w2=['下行']; end if time_sort(i,15)==1 w3=['上行']; else w3=['下行']; end disp(['先通过L' num2str(time_sort(i,1)) '经过' num2str(time_sort(i,2)) '个站点' w1 '到S' num2str(time_sort(i,6)) ',再通过L' num2str(time_sort(i,7)) '经过' num2str(time_sort(i,8)) '个站点' w2 '到S' num2str(time_sort(i,12)) ',再通过L' num2str(time_sort(i,13)) '经过' num2str(time_sort(i,14)) '个站点' w3 '到终点----费用:' num2str(time_sort(i,18)) '----时间:' num2str(time_sort(i,19))]) end end toc
相关文章推荐
- 【数学建模集训系列】公交查询系统的matlab实现-问题重述
- 【数学建模集训系列】公交查询系统的matlab实现-公交站点和线路对应矩阵
- 【数学建模集训系列】公交查询系统的matlab实现-运行截图和结果
- 【数学建模集训系列】公交查询系统的matlab实现-公交与地铁换乘
- 【数学建模集训系列】公交查询系统的matlab实现-加入地铁线T1
- 【数学建模集训系列】公交查询系统的matlab实现-加入地铁线T2
- 【数学建模集训系列】公交查询系统的matlab实现-价格计算
- 【数学建模集训系列】公交查询系统的matlab实现-站点和站点之间直达矩阵
- 【数学建模集训系列】Matlab相机标定工具箱TOOLBOX_calib翻译-TOOLBOX_calib简介
- 数据查询网址汇总_数学建模系列
- 基于java最短路径算法公交查询系统的设计与实现
- Silverlight实现查询建模 系列索引
- 数学建模常用Matlab/Lingo/c代码总结系列——Matlab图形绘制函数汇总
- matlab 灰色系统预测 GM(1,1) 数学建模
- 【数学建模集训系列】系统动力学软件Vensim学习
- 【转】MATLAB实现构造Euler环游图的算法——数学建模
- 【数学建模集训系列】眼科病床安排问题——优先级调度
- 数学建模常用Matlab/Lingo/c代码总结系列——hamilton回路
- MATLAB实现构造Euler环游图的算法——数学建模
- 【数学建模集训系列】眼科病床安排问题——FCFS