滑雪是一項非常刺激的運動,為了獲得速度,滑雪的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。給出一個由二維數組表示的滑雪區域,數組的數字代表各點的高度。請你找出這個區域中最長的滑坡。
下面是一個例子:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
一個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。當然,25-24-23-...-3-2-1更長。事實上,這是最長的一條滑坡。
輸入文件ski.in的第一行為兩個數R, C,表示滑雪區域的行數和列數(1≤R,C≤100)。下面是R行,每行有C個整數,表示高度H(0≤H≤10000)。
輸出文件ski.out包括一行,只包含一個整數,表示滑雪區域中最長滑坡的長度
這是我的代碼 請問哪裡錯了 不能得滿分啊
program hx;
type info=array[1..3]of longint;
const movx:array[1..4]of shortint=(0,-1,1,0);
movy:array[1..4]of shortint=(1,0,0,-1);
var map:array [1..6000000]of info;
n,m,s,i,tot,max:longint;
procedure readin;
var i,j:longint;
begin
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
inc(s);
read(map[s][3]);
map[s][1]:=i;
map[s][2]:=j;
end;
end;
end;
procedure ordered(l,r:longint);
var i,j,m:longint;
jhq:info;
begin
m:=map[(l+r)div 2][3];
i:=l;
j:=r;
while i<=j do
begin
while map[i][3]
while map[j][3]>m do dec(j);
if i<=j then
begin
jhq:=map[i];
map[i]:=map[j];
map[j]:=jhq;
inc(i);
dec(j);
end;
if i
if j>l then ordered(l,j);
end;
end;
procedure search(k:longint);
var i:longint;
f:boolean;
begin
f:=false;
for i:=1 to 4 do
begin
if (map[k-1][1]=map[k][1]+movx[i])and(map[k-1][2]=map[k][2]+movy[i])and(map[k][3]<>map[k-1][3]) then
f:=true;
if f=true then inc(tot);
if f=false then
begin
if max<=tot then max:=tot
else tot:=0;
end;
if k-1=1 then exit;
search(k-1);
end;
end;
begin
s:=0;
readin;
ordered(1,s);
max:=0;
search(s);
write(max+1);
end.
不一定從最高處開始啊