帮忙解一道pascal题目,有程序的

问题描述:

帮忙解一道pascal题目,有程序的
.有个正方形房间,边长为10m,入口为左下角(0,0),出口为右上角(10,10),其中有些石头,横坐标Xi为整数,纵坐标Yi为实数,现在你的最大跳跃距离为k米,且只能向右上方或正右方或右下方跳跃,求你从入口到出口的路径长度最小为多少(保留两位小数),若无法到达出口,则输出-1.
【输入】
第一行N,K(N
1个回答 分类:综合 2014-12-11

问题解答:

我来补答
献上一个简单的dfs..
uses math;
var i,j,k,n:longint;
m,d:real;
map:array[0..110,0..110]of real;
x,y:array[0..110]of real;
dis:array[0..110]of real;
procedure dfs(p:integer;d:real);
var i:longint;
begin
dis[p]:=d;
for i:=1 to n do
if(map[p,i]>0)and((dis[i]=0)or(dis[i]>dis[p]+map[p,i]))then
dfs(i,dis[p]+map[p,i]);
end;
begin
readln(n,m);
for i:=1 to n do
readln(x[i],y[i]);
inc(n);
x[n]:=10;
y[n]:=10;
for i:=0 to n do begin
for j:=0 to n do begin
if(i=j)or(x[i]>=x[j])then
continue;
d:=sqrt((x[i]-x[j])**2+(y[i]-y[j])**2);
if(d<=m)then
map[i,j]:=d;
end;
end;
dfs(0,0);
writeln(dis[n]:0:2);
end.
 
 
展开全文阅读
剩余:2000
也许感兴趣的知识