馬踏棋盤 (八皇后 迷宮)

2021-08-30 04:30:59 字數 1110 閱讀 5147

馬踏棋盤:(八皇后+迷宮)

將馬隨機放在西洋棋的board[0~7][0~7]的某個方格中,馬按走棋規則進行移動。,走遍棋盤上全部64個方格。編制遞迴程式,求出馬的行走路線,並按求出的行走路線,將數字1,2,…,64依次填入乙個8×8的方陣,輸出之。將每個格仔作為起始位置。求所有解。

思想:

8*8的棋盤,其中最中間的格仔,馬按日走,共有八個方向,邊框的格仔並沒有八個方向,角的格仔更少,為使問題簡單化,可以在儲存棋盤時,在棋盤的外圍在家兩層格仔,但不可走,這樣可走的每個格仔都有八個方向(但每個方向不一定可以走),使得問題得到普遍化。

對於每個格仔的八個方向依次進行試探,看其是否可走(包含這個格仔本身是否為可行走的格仔,與是由走過),若某方向可走,便對其標記,並踏上去,將此格仔作為新的格仔依次試探其八個方向;若不可走,則返回上乙個格仔,撤除標記,繼續試探未試探的其他方向。依次迴圈,當踏遍64個格仔時,便可得到一組解,。

要得到以乙個起始位置的所有解,則當找到一組解時,將其輸出,返回上乙個格仔,繼續試探其他方向。找到新的一組解,輸出,返回,當此格仔的方向試探完畢,返回上一層,試探上一層的剩餘方向,依次迴圈,便可得到所有解。

所需借助的儲存工具:

1.棋盤: 根據思想,需用乙個12*12的二維陣列來存放整個棋盤。

2.各個方向:需要乙個8*2的二維陣列來存放八個方向所對應的運算元。

3.需要乙個整形變數來存放踏了多少個格仔;

偽**:

horse (int x , int y);

int cnt=1;

int move[8][2]=; //下標0代表x 1代表y

int num=1;

void print ()

}void horse (int x,int y)

horse(new_x,new_y);

checher[new_y][new_x]=0;

--cnt;

} }}int main (void)

回溯法的典型問題 八皇后 馬踏棋盤 迷宮

一 八皇后 八皇后問題是乙個經典的問題,在乙個8 8的棋盤上放置8個皇后,每行乙個並使其不能互相攻擊 同一行 同一列 同一斜線上的皇后都會自動攻擊 include include define init 10000 定義初始化資料 using std cout using std cin using...

馬踏棋盤python 馬踏棋盤python實現

import collections import random class checkerboard object 初始化棋盤 def init self,len self.len len self.position has gone set def init checkerboard self ...

BFS總結經驗 馬踏棋盤 迷宮2

bfs的基本模板 c 示例模板 vis max max 標記陣列,要是走過這個點之後就標記為1 len max max 步數陣列,要是再進行一次while迴圈的時候len在上乙個點的時候值 1 map n m 可能會設定成char陣列,根據題意來 n,m 區域大小 分析 1.看題的時候抓住 最小步數...