問題描述:假設西洋棋棋盤有5*5共25個格仔。設計乙個程式,使棋子從初始位置(棋盤編號為1的位置)開始跳馬,能夠把棋盤的格仔全部都走一遍,每個格仔只允許走一次。要求:
1):輸出乙個解(用二維陣列來記錄馬跳的過程,即[步號,棋盤格編號]),左上角為第一步起點;
2):求總共有多少解;
*注:西洋棋的棋子是在格仔中間的。 題目如下圖
問題分析:由於西洋棋的棋子是在格仔中間而不是線的交點處(這一點與中國象棋不同),所以我們可以將西洋棋棋盤看做是乙個5行5列的二維陣列,陣列的每個元素代表棋盤上的乙個格仔(中國象棋裡陣列的乙個元素代表乙個交點)。陣列從左往右、從上往下依次編號為1至25,**如下
int a[5][5]=,,,,}; //將棋盤看成乙個5行5列的二維陣列a[5][5],從左上角開始編號為1,一直到右下角編號為25
同時題目要求我們每個格仔只能經過一次,所以我們需要再定義乙個5行5列的標記陣列對應棋盤的格仔,通過標記陣列的值來判斷對應的棋盤格是否已經走過。
int a0[5][5]=; //a0是標記陣列,對應棋盤的每乙個格仔,初始值為0,用來判斷每個格仔是否已經走過,如果已經走過,則對應的值為1
同時我們還需要定義乙個整形變數來記錄步號,乙個整形變數來記錄總的解數,乙個整形陣列來記錄每一步的棋盤格編號
int step[26]=,answer_num; //answer_num是總的解數 一維陣列step記錄的是馬走每一步經過的棋盤編號,因為步數是從1開始,到25結束,所以陣列的長度為26,這樣最後乙個數的下標為25
int step_num=0,flag=1; //step_num表示第幾步 flag是答案輸出標記
#includeint step[26]=,answer_num; //answer_num是總的解數 一維陣列step記錄的是馬走每一步經過的棋盤編號,因為步數是從1開始,到25結束,所以陣列的長度為26,這樣最後乙個數的下標為25
int step_num=0,flag=1; //step_num表示第幾步 flag是答案輸出標記
int a[5][5]=,,,,}; //將棋盤看成乙個5行5列的二維陣列a[5][5],從左上角開始編號為1,一直到右下角編號為25
int a0[5][5]=; //a0是標記陣列,對應棋盤的每乙個格仔,初始值為0,用來判斷每個格仔是否已經走過,如果已經走過,則對應的值為1
//check()是判斷格仔是否合法的函式,返回乙個整數,引數是格仔在二維陣列a[5][5]中的下標
int check(int x,int y)
//search()是求解從編號為1的格仔開始把棋盤全部格仔走一遍的步驟的函式,有兩個引數,分別是格仔在二位陣列a[5][5]中的橫、縱座標,取值範圍均為0--4
void search(int x,int y)
flag=0; //當已經輸出一種解後令flag的值為0,不再輸出後面的解
}a0[x][y]=1; //同時將對應位置的a0陣列的值置為1,表示這一格已經走過
//遍歷其他8個方向,尋找其他可能的解
search(x-2,y-1);
search(x-1,y+2);
search(x-1,y-2);
search(x+2,y+1);
search(x+2,y-1);
search(x+1,y-2);
search(x-2,y+1);
search(x+1,y+2);
//由於要求出所有的解法,所以當step_num等於25時退出遞迴,同時把對應位置的a0陣列的值置為0,並且退回到24步,去尋找其他第25步的可能。如果沒有其他第25步的可能,則退回到第23步,尋找其他第24步的可能,以此類推下去,直到找到所有可能的解法
step_num--;
a0[x][y]=0;
}}int main()
python繪製西洋棋規則口訣 西洋棋口訣
1.用車鎖門 直線或橫線 2.王與王形成馬步 用自己的王逼迫對方王到角落去 3.不是馬步走馬步 想辦法按正確的走法用已方王和對方王走成馬字步的局面 4.捉車就遠離 有時聰明的對方王會來捉你的車,這時就用車離它遠點,記住 離,豎線鎖門就豎線遠離 5.對王就將軍 如果對方的王和已方王走成了對王時,就是將...
1345 西洋棋
西洋棋的棋盤是黑白相間的8 8的方格,棋子放在格仔中間。王 後 車 象的走子規則如下 王 橫 直 斜都可以走,但每步限走一格。後 橫 直 斜都可以走,每步格數不受限制。車 橫 豎均可以走,不能斜走,格數不限。象 只能斜走,格數不限。你的任務是寫乙個程式,給定起始位置和目標位置,計算王 後 車 象從起...
馬的移動問題 西洋棋BFS
輸入包含多組測試資料。每組輸入由兩個方格組成,每個方格包含乙個小寫字母 a h 表示棋盤的列號,和乙個整數 1 8 表示棋盤的行號。對於每組輸入,輸出一行 to get from xx to yy takes n knight moves.e2 e4 a1 b2 b2 c3 a1 h8 a1 h7 ...