⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alpinist.pas

📁 This ar the basic programs that i did in highschool. From very simple to medium programs. From array
💻 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 + -