ssl1456 騎士旅行

2021-07-25 14:18:38 字數 2032 閱讀 8520

騎士旅行

time limit:1000ms  memory limit:65536k

total submit:263 accepted:103

description

在乙個n m 格仔的棋盤上,有乙隻西洋棋的騎士在棋盤的左下角 (1;1)(如圖1),騎士只能根據象棋的規則進行移動,要麼橫向跳動一格縱向跳動兩格,要麼縱向跳動一格橫向跳動兩格。 例如, n=4,m=3 時,若騎士在格仔(2;1) (如圖2), 則騎士只能移入下面格仔:(1;3),(3;3) 或 (4;2);對於給定正整數n,m,i,j值 (m,n<=50,i<=n,j<=m) ,你要測算出從初始位置(1;1) 到格仔(i;j)最少需要多少次移動。如果不可能到達目標位置,則輸出"never"。 

輸入檔案的第一行為兩個整數n與m,第二行為兩個整數i與j。

output

輸出檔案僅包含乙個整數為初始位置(1;1) 到格仔(i;j)最少移動次數。

sample input

5 31 2

sample output

3source

elba

vardx:array[1..8]of longint;

dy:array[1..8]of longint;

a:array[0..50+1,0..50+1] of longint;

father:array[1..50*50]of longint;

state:array[1..50*50,1..3] of longint;//3用於記錄步數(父節點數)

qx,qy,n,m,s:longint;

procedure init;

begin

readln(n,m);

read(qx,qy);

end;

procedure bfs;

varhead,tail,k,x,y:longint;

begin

head:=0;tail:=1;

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

father[1]:=0;

repeat

inc(head);

for k:=1 to 8 do

begin

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

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

if (x>=1) and (x<=n) and (y>=1) and (y<=m) 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 (state[tail,1]=qx) and (state[tail,2]=qy) then

begin

s:=state[head,3]+1;//統計到達終點的步數

writeln(s);

halt;

tail:=0;//其實這條語句不必要,在執行它之前就當機了,不過出於是廣搜,暫且保留它吧

end;

end;

end;

until head>=tail;

end;

begin

dx[1]:=-1;dx[2]:=-2;dx[3]:=-2;dx[4]:=-1;dx[5]:=1;dx[6]:=2;dx[7]:=2;dx[8]:=1;//打表

dy[1]:=2;dy[2]:=1;dy[3]:=-1;dy[4]:=-2;dy[5]:=-2;dy[6]:=-1;dy[7]:=1;dy[8]:=2;

init;

bfs;

writeln('never');

end.

騎士旅行 ssl 1456

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

SSL 1456騎士旅行

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

騎士旅行 BFS

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