資源簡介
帶蹩馬腿功能的馬踏棋盤程序,運用了帶有回溯功能的遞歸函數輸出所有的路徑。運行時間可能較長,打印輸出所有的情況需要等待一定的時間。
代碼片段和文件信息
#include
#include
#include
#pragma?warning(disable:4996)//頭文件及宏定義
#define?MAXN?10//棋盤的最大尺寸
#define?STALL_PIECE?123//蹩馬腿棋子
int?board[MAXN][MAXN]?=?{?0?};//初始化棋盤
int?moveHorizental[8]?=?{?21-1-2-2-112?};
int?moveVertical[8]?=?{?1221-1-2-2-1?};//定義馬移動的八種方式
int?stallPieceNumber;//蹩馬腿棋子的數目
/*
??功能:檢查輸入是否符合規范
??傳入參數:馬的橫縱坐標?棋盤的大小
??返回參數:bool數據類型
*/
bool?Check(int?x?int?y?int?N)
{
if?(x?0?||?x?>=?N?||?y?0?||?y?>=?N?||?board[x][y]?!=?0) //檢查輸入坐標是否在棋盤內以及該位置是否已經被走過或有蹩馬腿棋子占用
return?false;//輸入不符合規范
return?true;//輸入符合規范
}
/*
??功能:判斷是否被蹩馬腿
??傳入參數:當前位置?下一個位置
??返回參數:bool數據類型
*/
bool?IsStalled(int?currentX?int?currentY?int?nextX?int?nextY)
{
bool?flag?=?false;//有沒有被蹩馬腿的標志
int?deltX?=?nextX?-?currentX;
int?deltY?=?nextY?-?currentY;//計算位置的變化量
bool?pieces[4]?=?{?false?};//初始假設四個方向均未被蹩馬腿
if?(board[currentX?-?1][currentY]?==?STALL_PIECE)
pieces[0]?=?true;//左側有棋子
else?if?(board[currentX][currentY?+?1]?==?STALL_PIECE)
pieces[1]?=?true;//下方有棋子
else?if?(board[currentX?+?1][currentY]?==?STALL_PIECE)
pieces[2]?=?true;//右側有棋子
else?if?(board[currentX][currentY?-?1]?==?STALL_PIECE)
pieces[3]?=?true;//上方有棋子
if?(pieces[0]?&&?abs(deltY)?==?1?&&?deltX?==?-2)
flag?=?true;//左側被蹩馬腿
if?(pieces[1]?&&?abs(deltX)?==?1?&&?deltY?==?2)
flag?=?true;//下方被蹩馬腿
if?(pieces[2]?&&?abs(deltY)?==?1?&&?deltX?==?2)
flag?=?true;//右側被蹩馬腿
if?(pieces[3]?&&?abs(deltX)?==?1?&&?deltY?==?-2)
flag?=?true;//上方被蹩馬腿
return?flag;//返回是否被蹩馬腿
}
/*
??功能:尋找馬踏棋盤的路徑
??傳入參數:馬的當前位置坐標?棋盤大小?走的步數
??返回參數:無
*/
void?HorseTraversal(int?thisX?int?thisY?int?N?int?stepNumber)
{
int?i;//循環控制變量
int?nextX?nextY;//馬的下一個位置的坐標
for?(i?=?0;?i?
- 上一篇:基于C語言的短信pdu的編碼解碼所有資料
- 下一篇:數據結構課設——作業管理系統
評論
共有 條評論