騎士遊歷問題 至少需要多少步

2021-09-12 19:19:24 字數 924 閱讀 1425

題目描述

西洋棋的棋盤大家應該都很熟悉了,那麼給定棋盤上的兩個格位,乙個騎士(knight)需要幾步才能從其中乙個格位來到另乙個格位呢?

//注意騎士沿乙個3*2方格區域的對角線移動。

輸入多組測試資料。對於每組資料,包含兩個輸入資料,分別為西洋棋棋盤上兩個格位的位置。

輸出對於每組資料,輸出一行it takes (ans) steps to get from 第乙個格位 to 第二個格位。

輸入樣例

e2 e4

a1 b2

b2 c3

輸出樣例

it takes 2 steps to get from e2 to e4

it takes 4 steps to get from a1 to b2

it takes 2 steps to get from b2 to c3

開始的時候還不太會回溯、搜尋什麼的,只知道乙個dfs暴力搜……很明顯這種最少步數應該用bfs的。

也算是bfs的一種經典問題,帶層次的bfs。用乙個last記錄當前層的最後乙個元素,用乙個nlast記錄下一層的最後乙個元素。如果當前元素到了這一層的last元素這,那就表示層次加一,即到了下一層,相應的last也移動到nlast的位置。

#include#includeusing namespace std;

typedef pairp;

int v[10][10] = ;

int m,n;

int nx = ;

int ny = ;

int bfs(int x, int y)

} if(cur == last)

}}int main()

return 0;

}

還是不怎麼熟悉,還是得多加練習c++和演算法之類的。

經典回溯問題 騎士遊歷問題

在乙個n n 格仔的棋盤上,有乙隻西洋棋的騎士在棋盤的左下角,騎士只能根據象棋的規則進行移動,要麼橫向跳動一格縱向跳動兩格,要麼縱向跳動一格橫向跳動兩格。騎士從第乙個格仔出發,每個格仔只能訪問一次,能否訪問完所有的格仔,請找到乙個解決方案。這是一道經典的回溯演算法題目,這裡的狀態就是每一步騎士所在的...

騎士遊歷問題(馬踏棋盤)解析(c )

解題思路 這是一道經典的遍歷問題 dfs 由於題目要求遍歷全部,那麼肯定要做標記,因此立馬想到dfs深度優先演算法。具體思路如下 了解西洋棋以及西洋棋騎士的走法 西洋棋和中國象棋,大同小異,畢竟中國象棋是老祖先。西洋棋棋子放在格仔中,中國象棋放在點上,且西洋棋有64個格仔。西洋棋的騎士和中國象棋的馬...

邏輯題 喝 m 瓶汽水至少需要多少錢?

某學院有m個學生參加春遊,休息時喝汽水。商家公告 買一瓶汽水定價1.40元,喝一瓶汽水 瓶不帶走 1.00元。為節約資源,規定3個空瓶可換回一瓶汽水,或20個空瓶可換回7瓶汽水。為方便顧客,可先借後還。例如借一瓶汽水還3個空瓶,或借七瓶汽水還20個空瓶 問 m個學生每人喝一瓶汽水 瓶不帶走 至少需要...