題目概述
有乙個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...