
求2013年同济大学数模校内赛B题参考论文,车辆超速最优路线问题 30
你驱车从A城赶往B城。A城和B城间的道路如下图所示,A在左下角,B在右上角,横向纵向各有10条公路,任意两个相邻的十字路口距离为100公里,所以A城到B城相距1800公里...
你驱车从A城赶往B城。A城和B城间的道路如下图所示, A在左下角,B在右上角,横向纵向各有10条公路,任意两个相邻的十字路口距离为100公里,所以A城到B城相距180 0公里。任意相邻的十字路口间的一段公路(以下简称路段)都有限速,标注在图上,单位为公里每小时。标注为130的路段是高速路段,每段收费3元。
整个旅途上的费用有如下两类。第一类与花费时间相关,如住店和饮食,由公式给出,单位小时。第二类是汽车的油费,每百公里油量(升)由公式给出,其中,的单位为公里每小时。汽油每升1.3元。
问题1. 若你遵守所有的限速规定,那么时间最短的路线和花费最少的路线分别是哪一条?
问题2. 为了防止超速行驶,交警放置了一些固定雷达在某些路段上,如图上红色的路段。另外,他们放置了20个移动雷达。这些雷达等概率地出现在各个路段,你可能在一个路段同时发现多个雷达,也可能在装有固定雷达的路段发现移动雷达。每个雷达都监控了自身所在的整个路段。如果你超速,你有的可能被雷达探测到,届时会被罚款100元;如果你超速,你有的可能被雷达探测到,届时会被罚款200元。
假设是遵守所有限速规定所花的最少时间,但你有急事想在时间内赶往B城,那么包括罚款在内最少花费多少?路线又是哪一条? 展开
整个旅途上的费用有如下两类。第一类与花费时间相关,如住店和饮食,由公式给出,单位小时。第二类是汽车的油费,每百公里油量(升)由公式给出,其中,的单位为公里每小时。汽油每升1.3元。
问题1. 若你遵守所有的限速规定,那么时间最短的路线和花费最少的路线分别是哪一条?
问题2. 为了防止超速行驶,交警放置了一些固定雷达在某些路段上,如图上红色的路段。另外,他们放置了20个移动雷达。这些雷达等概率地出现在各个路段,你可能在一个路段同时发现多个雷达,也可能在装有固定雷达的路段发现移动雷达。每个雷达都监控了自身所在的整个路段。如果你超速,你有的可能被雷达探测到,届时会被罚款100元;如果你超速,你有的可能被雷达探测到,届时会被罚款200元。
假设是遵守所有限速规定所花的最少时间,但你有急事想在时间内赶往B城,那么包括罚款在内最少花费多少?路线又是哪一条? 展开
展开全部
只做了第一问,第二问同求思路,第一问可以用dijkstra求解,就是简单的求最短路。matlab程序如下:
function [min,path]=dijkstra(w,start,terminal)
%W是邻接矩阵
%start是起始点
%terminal是终止点
%min是最短路径长度
%path是最短路径
n=size(w,1);
label(start)=0;
f(start)=start;
for i=1:n
if i~=start
label(i)=inf;
end
end
s(1)=start;
u=start;
while length(s)<n
for i=1:n
ins=0;
for j=1:length(s)
if i==s(j)
ins=1;
end
end
if ins==0
v=i;
if label(v)>(label(u)+w(u,v))
label(v)=(label(u)+w(u,v));
f(v)=u;
end
end
end
v1=0;
k=inf;
for i=1:n
ins=0;
for j=1:length(s)
if i==s(j)
ins=1;
end
end
if ins==0
v=i;
if k>label(v)
k=label(v);
v1=v;
end
end
end
s(length(s)+1)=v1;
u=v1;
end
min=label(terminal);
path(1)=terminal;
i=1;
while path(i)~=start
path(i+1)=f(path(i));
i=i+1 ;
end
path(i)=start;
L=length(path);
path=path(L:-1:1);
以上为函数,再写入命令即可。
function [min,path]=dijkstra(w,start,terminal)
%W是邻接矩阵
%start是起始点
%terminal是终止点
%min是最短路径长度
%path是最短路径
n=size(w,1);
label(start)=0;
f(start)=start;
for i=1:n
if i~=start
label(i)=inf;
end
end
s(1)=start;
u=start;
while length(s)<n
for i=1:n
ins=0;
for j=1:length(s)
if i==s(j)
ins=1;
end
end
if ins==0
v=i;
if label(v)>(label(u)+w(u,v))
label(v)=(label(u)+w(u,v));
f(v)=u;
end
end
end
v1=0;
k=inf;
for i=1:n
ins=0;
for j=1:length(s)
if i==s(j)
ins=1;
end
end
if ins==0
v=i;
if k>label(v)
k=label(v);
v1=v;
end
end
end
s(length(s)+1)=v1;
u=v1;
end
min=label(terminal);
path(1)=terminal;
i=1;
while path(i)~=start
path(i+1)=f(path(i));
i=i+1 ;
end
path(i)=start;
L=length(path);
path=path(L:-1:1);
以上为函数,再写入命令即可。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询