📄 alpinist.pas
字号:
program pr137;
const x:array[1..8] of integer=(-1,-1,0,1,1,1,0,-1);
y:array[1..8] of integer=(0,1,1,1,0,-1,-1,-1);
type stiva=array[1..100,1..3] of integer;
var st,st1:stiva;
n,m,x0,y0,x1,y1,l,c,k,i,j,q,p,min,max:integer;
as,ev:boolean;
a:array[1..20,1..20] of integer;
procedure init(var st:stiva;k:integer);
begin
st[k,1]:=0;
end;
procedure succesor(var st:stiva;k:integer;var as:boolean);
begin
if st[k,1]<8 then
begin
inc(st[k,1]);
as:=true;
end
else
as:=false;
end;
procedure valid(st:stiva;k:integer;var ev:boolean);
begin
ev:=true;
l:=st[k,2] +x[st[k,1]];
c:=st[k,3]+y[st[k,1]];
if (l<1) or (l>m) or (c<1) or (c>n) then ev:=false;
for i:=1 to k do
if (st[i,2]=l) and(st[i,3]=c) then ev:=false;
if a[l,c]<a[st[k,2],st[k,3]] then ev:=false;
end;
function solutie(st:stiva;k:integer):boolean;
begin
solutie:=(st[k,2]=x1) and(st[k,3]=y1)
end;
procedure tipar(st:stiva;k:integer);
var i,j:integer;
begin
for i:=1 to k do
write(st[i,2],' ',st[i,3]);
end;
procedure optim(st:stiva;k:integer);
begin
if k<min then
begin
st1:=st;
min:=k;
end;
end;
begin
write('m=');readln(m);
write('n= ');readln(n);
write('x0=');readln(x0);
write('y0=');readln(y0);
max:=-maxint;
for i:=1 to m do
for j:=1 to n do
begin
write('a[',i,',',j,']=');
readln(a[i,j]);
end;
for i:=1 to m do
for j:=1 to n do
if a[i,j]>max then begin
max:=a[i,j];
x1:=i;
y1:=j;
END;
min:=maxint;
k:=1;
init(st,k);
st[k,2]:=x0;
st[k,3]:=y0;
while k>0 do
begin
repeat
succesor(st,k,as);
if as then valid(st,k,ev);
until (not as) or(as and ev);
if as then begin
inc(k);
init(st,k);
st[k,2]:=l;
st[k,3]:=c;
if solutie(st,k) then optim(st,k);
end
else dec(k);
end;
tipar(st1,min);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -