洛谷 P1443 馬的遍歷

2021-07-26 14:03:22 字數 1350 閱讀 6740

題目概述

有乙個n*m的棋盤(1

解題思路

使用廣搜,注意地圖邊界和馬跳的方向即可。可以採用for代替8個if來減少要碼的字。注意棧的讀寫。

時間複雜度:o(n*m)

空間複雜度:o(n*m)

源程式

const

d:array[1..2,1..8]of longint=((-2,-2,-1,-1,1,1,2,2),(1,-1,2,-2,2,-2,1,-1));

vara:array[1..1002,1..1002]of longint;

b:array[1..250020,1..2]of longint;

n,m,x,y,i,j,top,tail:longint;

s:string;

begin

readln(n,m,x,y);

b[1,1]:=x;

b[1,2]:=y;

for i:=1 to n do

for j:=1 to m do

a[i,j]:=-1;

a[x,y]:=0;

top:=0;

tail:=1;

while top250000 then top:=1;

for i:=1 to 8 do

if (b[top,1]+d[1,i]>=1)and(b[top,1]+d[1,i]<=n)

and(b[top,2]+d[2,i]>=1)and(b[top,2]+d[2,i]<=m)

and(a[b[top,1]+d[1,i],b[top,2]+d[2,i]]=-1)then

begin

inc(tail);

if tail>250000 then tail:=1;

b[tail,1]:=b[top,1]+d[1,i];

b[tail,2]:=b[top,2]+d[2,i];

a[b[tail,1],b[tail,2]]:=a[b[top,1],b[top,2]]+1;

end;

end;

for i:=1 to n do

begin

for j:=1 to m-1 do

begin

s:='';

str(a[i,j],s);

while length(s)<5 do

s:=s+' ';

write(s);

end;

writeln(a[i,m]);

end;

end.

洛谷 P1443馬的遍歷

有乙個n m的棋盤 1輸入格式 一行四個資料,棋盤的大小和馬的座標 輸出格式 乙個n m的矩陣,代表馬到達某個點最少要走幾步 左對齊,寬5格,不能到達則輸出 1 輸入樣例 1 複製3 3 1 1 輸出樣例 1 複製0 3 2 3 1 1 2 1 4 include include include i...

洛谷P1443 馬的遍歷

有乙個n m的棋盤 1輸入格式 一行四個資料,棋盤的大小和馬的座標 輸出格式 乙個n m的矩陣,代表馬到達某個點最少要走幾步 左對齊,寬5格,不能到達則輸出 1 輸入樣例 1 複製 3 3 1 1輸出樣例 1 複製 0 3 2 3 1 1 2 1 4bfs模板題 includeusing names...

洛谷 P1443 馬的遍歷

有乙個n m的棋盤 1一行四個資料,棋盤的大小和馬的座標 乙個n m的矩陣,代表馬到達某個點最少要走幾步 左對齊,寬5格,不能到達則輸出 1 輸入 3 3 1 1 輸出 0 3 2 3 1 1 2 1 4 include include include include using namespace...