騎士問題 BFS DFS 記搜

2022-09-03 07:03:09 字數 1638 閱讀 3071

題目大意: 乙個8

×8' role="presentation">8×8

8×8的棋盤上有

n' role="presentation">n

n個點不可以走,求馬(騎士)從(s

x,sy

)' role="presentation">(sx

,sy)

(sx,

sy)走到

(ex,

ey)' role="presentation">(ex

,ey)

(ex,

ey)的最少步數。 in

put' role="presentation">inp

utin

put

10

c1 d1 d5 c2 c3 c4 d2 d3 d4 c5

a1 f1

0c1 b3

2b3 c2

a1 b2

-1

ou

tput

' role="presentation">out

puto

utpu

t

board

1: 7 moves

board

2: 1 moves

board

3: not reachable

思路:

bfs比較裸的廣搜吧。。。將n

' role="presentation">n

n個點賦值為1,表示不可以走,到時候走過的點也賦值給1,最終回溯輸出答案。

當然這道題記搜和dfs也都可以,2023年的gdoi應該也是比較簡單的一次了吧。時限都是2秒。

**:

#include 

#include

#include

using

namespace

std;

const

int dx=;

const

int dy=;

int n,state[100001][3],a[101][101],head,tail,sx,sy,ex,ey,father[100001],tot,sum;

string s;

void print(int x,int k) //回溯輸出

bool check(int x,int y)

void bfs()

a[xx][yy]=1;

state[tail][1]=xx;

state[tail][2]=yy;

father[tail]=head;

if (check(xx,yy)) //到達了終點}}

while (headprintf("not reachable\n");

return;

}int main()

cin>>s;

sx=s[0]-'a'+1;

sy=s[1]-'0';

cin>>s;

ex=s[0]-'a'+1;

ey=s[1]-'0'; //起點和終點

a[sx][sy]=1;

printf("board %d: ",tot);

bfs();

}return

0;}

騎士問題 廣搜

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述小hi 小ho你會下西洋棋麼?小ho 應該算會吧,我知道每個棋子的移動方式,馬走日象飛田什麼的 小hi 象飛田那是中國象棋啦!小ho 哦,對。西洋棋好像是走斜線來著。小hi 不過馬走日倒是對了。西洋棋中的馬一般叫做騎士,關...

HOJ 1440 騎士巡遊 BFS DFS

題目大意 你 的乙個朋友正在研究騎士巡遊問題,你的問題在於找到兩個方格之間移動的最小步數,一旦您解決了這個問題 找到你的旅行方式就會變的簡單 你的工作時寫乙個程式,方格 a b 作為輸入 決定a 到 b 最少的步數 輸入 輸入會有多組測試 魅族測試 一行 表示兩個方格位置 並且用 空格分開 每個 方...

BFS(廣搜) 騎士旅行

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