騎士旅行pascal解題程式

2021-07-25 13:40:48 字數 1380 閱讀 7182

這題我是用廣度優先搜尋的方法來做的

我先找出下乙個能走的點,再把它放進佇列裡,如果到了目標點,就把tail放進best,tail等於0,最後輸出。

做這題的時候,用最大資料時,一直棧溢位,原來是陣列不夠大,把50*50算成250了,搞得我除錯了超久。

const

dx:array[1..8]of integer=(2,2,1,1,-1,-1,-2,-2);

dy:array[1..8]of integer=(-1,1,-2,2,-2,2,-1,1);

varqx,qy,n,m,best:longint;

father:array[1..2500]of longint;

a:array[-1..500,-1..500]of longint;

state:array[1..2500,1..3]of longint;

procedure init;

begin

readln(n,m);

read(qx,qy);

a[1,1]:=1;

end;

procedure bfs;

varhead,tail,wayn,x,y,k:integer;

begin

father[1]:=0;head:=0;tail:=1;

state[1,1]:=1;state[1,2]:=1;

repeat

inc(head);

for wayn:=1 to 8 do

begin

x:=state[head,1]+dx[wayn];

y:=state[head,2]+dy[wayn];

if (x>=1)and(x<=m)and(y>=1)and(y<=n)and(a[x,y]=0) then

begin

inc(tail);father[tail]:=head;

state[tail,1]:=x;state[tail,2]:=y;

a[x,y]:=1;

state[tail,3]:=state[head,3]+1;

if (x=qx)and(y=qy) then

begin

best:=tail;

tail:=0;

break;

end;

end;

end;

until head>=tail;

end;

procedure print;

begin

if best=0 then writeln('never') else write(state[best,3]);

end;

begin

init;

bfs;

print;

end.

部落衛隊pascal解題程式

type jh set of 0.100 集合 varn,m,i,u,v,tj longint w jh a,f array 0.100 of boolean s array 1.100 of jh procedure search dep longint w jh t longint dep是第幾...

全排列問題pascal解題程式

var a,b array 0.9 of longint n longint procedure print vari longint begin for i 1 to n do write a i 5 要保留五個常寬 writeln end procedure search dep longint...

騎士旅行 BFS

description 在乙個n m 格仔的棋盤上,有乙隻西洋棋的騎士在棋盤的左下角 1 1 如圖1 騎士只能根據象棋的規則進行移動,要麼橫向跳動一格縱向跳動兩格,要麼縱向跳動一格橫向跳動兩格。例如,n 4,m 3 時,若騎士在格仔 2 1 如圖2 則騎士只能移入下面格仔 1 3 3 3 或 4 2...