最少转弯问题.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最少转弯问题最少转弯问题

一、最 少 转 弯 问 题 (文件名TURN.PAS) 给出一张地图,这张地图被分为n×m(n,m=100)个方块,任何一个方块不是平地就是高山。平地可以通过,高山则不能。现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯才能到达目的地(x2,y2)?你只能沿着水平和垂直方向的平地上行进,拐弯次数就等于行进方向的改变(从水平到垂直或从垂直到水平)的次数。 例如:如图1,最少的拐弯次数为5。 ( x1,y1) (x2,y2) (图1) 输入:共三行 第一行:n m 第2至n+1行:整个地图地形描述(0:空地;1:高山), 如(图1)第2行地形描述为:1 0 0 0 0 1 0 第3行地形描述为:0 0 1 0 1 0 0 …… 最后放在同一行。 第n+2行:x1 y1 x2 y2 (分别为起点、终点坐标) 输出:s (即最少的拐弯次数) 输入输出样例(见图1): TURN.IN TURN.OUT 5 7 1 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 1 0 1 3 1 7 5 样例程序-1: PROGRAM LOKyrandia; const fi=Turn.in; fo=Turn.out; Way:array[0..6,1..2]of shortint=((1,0),(0,1),(-1,0),(0,-1),(1,0),(0,1),(-1,0)); ex:array[1..3]of shortint=(0,3,1); var M,N:byte; mem:array[0..101,0..101]of byte; mem2:array[1..100,1..100,0..3]of byte; X1,Y1,X2,Y2:byte; ans:byte; PROCEDURE Init; var f:text; i,j:byte; begin fillchar(mem,sizeof(mem),1); fillchar(mem2,sizeof(mem),255); assign(f,fi); reset(f); readln(f,N,M); for j:=1 to N do for i:=1 to M do read(f,mem[i,j]); read(f,Y1,X1,Y2,X2); close(f); ans:=255; end; PROCEDURE Kernel(X,Y:byte;head:byte;Turn:byte); var i,j:shortint; begin if (X=X2)and(Y=Y2) then begin if Turnans then ans:=Turn; exit; end; mem2[X,Y,head]:=Turn; mem2[X,Y,(head+1)mod 4]:=Turn+1; mem2[X,Y,(head+2)mod 4]:=Turn; mem2[X,Y,(head+3)mod 4]:=Turn+1; for j:=1 to 3 do begin i:=head+ex[j]; if mem[X+way[i,1],Y+way[i,2]]=0 then if (mem2[X,Y,i mod 4]ans) and (mem2[X,Y,i mod 4]mem2[X+way[i,1],Y+way[i,2],i mod 4]) then Kernel(X+way[i,1],Y+way[i,2],i mod 4,mem2[X,Y,i mod 4]); end; en

文档评论(0)

enxyuio + 关注
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档