1、 end; num:word;procedure init;var i,j: ch:char;begin assign(input,cell.in);reset(input); fillchar(b,sizeof(b),false);=0; readln(m,n); for i:=1 to m do begin for j:=1 to n do read(ch); if ch0 then bi,j:=true; readln; close(input);end;initprocedure find(newi,newj:byte);var k: head,tail: bnewi,newj:=fa
2、lse; inc(num); with que1 do begin i:=newi; j:=newj; head:tail:=1; repeat inc(head); for k:=1 to 4 do if(quehead.i+dikin1.m)and(quehead.j+djkin1.n)and(bquehead.i+dik,quehead.j+djk)then inc(tail); with quetail do begin i:=quehead.i+dik;=quehead.j+djk; bquetail.i,quetail.j: until head=tail;findprocedur
3、e work; if bi,j then find(i,j);workprocedure print; assign(output,cell.outrewrite(output); writeln(num); close(output);print;beginmain init; work; print;end.6、营救铁塔尼号遇险了!他发出了求救信号。距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里。通过侦测,哥伦比亚号获取了一张海洋图。这张图将海洋部分分化成n*n个比较小的单位,其中用1标明的是陆地,用0标明是海洋。船只能从一个格子,移到相邻的四个格子。为了尽快赶到出事地点,
4、哥伦比亚号最少需要走多远的距离。【输入格式】第一行为n,下面是一个n*n的0、1矩阵,表示海洋地图最后一行为四个小于n的整数,分别表示哥伦比亚号和铁塔尼号的位置。【输出格式】哥伦比亚号到铁塔尼号的最短距离,答案精确到整数。【输入样例】save.in30011011001 1 3 3【输出样例】save.out【数据范围】N0)and(quehead.x+dxi0)and(quehead.y+dyi0 then begin statusk: dec(turn0);if turn1 dec(turn1);=n downto 1 do write(statusk); writeln;print fi
5、llchar(b,sizeof(b),true); bn: que1.pre: que1.n0:=n; que1.turn0: for turn0:=0 to n-1 do=n-1-turn0; if(turn0=quehead.n0)and(turn1=n-quehead.n0)and(bquehead.n0-turn0+turn1)then bquehead.n0-turn0+turn1: quetail.pre:=head; quetail.n0:=quehead.n0-turn0+turn1; quetail.turn0:=turn0; if quetail.n0=0 then pri
6、nt;8、最少转弯问题(TURN.PAS)给出一张地图,这张地图被分为nm(n,m=100)个方块,任何一个方块不是平地就是高山。平地可以通过,高山则不能。现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯才能到达目的地(x2,y2)?你只能沿着水平和垂直方向的平地上行进,拐弯次数就等于行进方向的改变(从水平到垂直或从垂直到水平)的次数。例如:如图1,最少的拐弯次数为5。 ( x1,y1)第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
7、x2 y2 (分别为起点、终点坐标)s (即最少的拐弯次数)【输入输出样例】(见图1):TURN.INTURN.OUT5 71 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 01 3 1 75var n,m,x1,y1,x2,y2:array0.101,0.101of 0.1;array1.10000of record x,y,turns:shortint;turn.inturn.out fillchar(map,sizeof(map),1); readln(n,m); if(x1=x2)and(y1=y2)
8、then begin writeln(0);procedure go(newx,newy:=newx;=newy; turns:=quehead.turns+1; if(newx=x2)and(newy=y2)then begin writeln(quetail.turns); mapnewx,newy:govar d:=-1; d:=quehead.x-1; while mapd,quehead.y=0 do begin go(d,quehead.y); dec(d);=quehead.x+1; inc(d);=quehead.y-1; while mapquehead.x,d=0 do begin go(quehead.x,d);=quehead.y+1; .
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1