題目描述
西洋棋的棋盤大家應該都很熟悉了,那麼給定棋盤上的兩個格位,乙個騎士(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個學生每人喝一瓶汽水 瓶不帶走 至少需要...