演算法實踐 棋盤遍歷問題

2021-10-04 21:07:23 字數 1681 閱讀 2772

如下圖分別是(p,q)為(3,9) , (6,3) ,以及(5,5)的棋盤空間。

請問對於每一種棋盤(p,q),請問2d騎士是否有一種一次遍歷所有棋盤方格的路線?

如果有,請輸出這條路線(若有多條路線,請輸出字典序最小的路線)。

如果沒有,請輸出無。

輸入資料第一行為正整數n,代表有多少組輸入樣例

接下來n行是兩個整數代表行p和列q, 代表變形棋盤的行列引數,其中(1 <= p * q <= 26)。

每個樣例的輸出2行,格式如下:

「#i:」 其中i代表第i種棋盤

騎士跳過的每個格仔(每個訪問的格仔用大寫字母加數字表示),一條可行的路徑輸出如(a1b3c1a2b4c2a3b1c3a4b2c4),

如果沒有可行方案,則第二行輸出:none

5

5 15 2

5 35 4

5 5

#1:

none

#2:none

#3:none

#4:a1b3a5c6d4b5d6c4d2b1a3c2b4a2c1d3b2d1c3d5b6a4c5a6

高,馬踏棋盤問題,可以用回溯,也可以用dfs

code by linli

#include

using

namespace std;

typedef

long

long ll;

#define maxn 30

struct point

;point path[30]

;//用於儲存路徑

int p,q;

//棋盤引數

int visit[maxn]

[maxn]

;//標記矩陣

int direction[8]

[2]=

,,,,

,,,}

;bool

dfs(

int x,

int y,

int step)

} visit[x]

[y]=0;

//回溯,取消這一步的走法

return

false;}

intmain()

}if(flag)

break

;else cout<<

"none"

<

}return0;

}//#4:

//a1b3a5c6d4b5d6c4d2b1a3c2b4a2c1d3b2d1c3d5b6a4c5a6

//a1b3c1a2b4d3e1c2d4e2c3a4b2d1e3c4a3b1d2e4

得到的順序有點問題…

knight遍歷棋盤問題,回溯應用

能給出所有符合標準的答案.很早前寫的了,還是個c風格的,照著書上的迷宮問題寫法改的,可能是我至今寫過的最規範的程式.資料的輸入,三個數字,逗號隔開,第乙個n表示棋盤為n n的,接下來兩個數字表示起點的座標 1 x,y n 比如 5,3,3 很早的程式,還是vc6下調的.include include...

演算法 遞迴 棋盤覆蓋問題

1 最小情況 2 原問題與子問題同型 3 原問題的解可以用子問題的解來構造 在乙個2的k次方 x 2的k次方 此處數學公式的插入待修改 個方格的棋盤中,恰有乙個方格與其他方格不同,則稱該方格為特殊方格,在棋盤覆蓋問題中,要用l型骨牌 覆蓋乙個帶有乙個特殊方格的棋盤,特殊方塊上不能覆蓋骨牌,其他方塊上...

棋盤覆蓋問題 分治演算法

演算法日誌記錄pta 在乙個2 k 2 k k為正整數,k 10,length 2 k 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格 其座標為aa,bb,分別代表行座標號和列座標號 以及有四種l型骨牌 如下圖 求用若干塊這種l型骨牌實現除該特殊點棋盤的全覆蓋。本題要求採用分治...