C語言練習題 八皇后問題

2021-09-06 17:08:14 字數 1201 閱讀 6065

《c和指標》 練習題8.8

**參考至:

問題描述

皇后是西洋棋中威力最大的棋子。在下面所示的棋盤上,皇后可以攻擊位於箭頭所覆蓋位置的所有棋子。我們能不能把n個皇后放在棋盤(n×n)上,它們中的任何乙個都無法攻擊其餘的皇后?請編寫程式輸出皇后的擺放方案,並找出一共有幾種方法。

char board[n+2][n+2]; //乙個8*8的棋盤,最外圍位置用'#'填充

int count = 0; //用於統計有多少種放置策略

struct pos

;//初始化乙個結構體陣列pos,用於檢查'皇后之間'的相對位置是否合理

struct pos pos[3] = , //左上偏移

, //向上偏移

//右上偏移

};//初始化棋盤

void init(void)

}for ( i = 1; i <= n; i++)

}}//顯示棋盤(列印陣列)

void show(void)

printf("\n");

}}//檢查這個位置放置皇后,是否與其他(已放置的)皇后相互排斥

//輸入: row行小下標 col列下標

//返回: 1合理 0不合理

int check(int row, int col)

nr = nr + pos[i].yos; //偏移下標

nc = nc + pos[i].xos;}}

return ret;

}//採用回溯法,通過遞迴的手段,找出每一種策略。

//輸入: row開始位置的行標

//處理: 將'皇后'們放置結果安排在陣列,統計策略總數。

//輸出: 列印輸出(陣列)每一種策略

void find(int row)

else}}

}int main()

展示

搜尋練習題(1)八皇后

檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 4 6 1...

搜尋入門練習題5 八皇后問題 題解

題目描述 輸出格式 輸出乙個整數,用於表示八皇后問題的放置方案。題目分析 首先我們用 x,y 來表示棋盤上第 x 行第 y 列的格仔的座標。那麼,兩個皇后 x 1,y 1 和 x 2,y 2 會互相攻擊當且僅當滿足如下條件之一 我們可以用深度優先搜尋來解決這道題。我們可以發現的是,要想在 8 tim...

C語言練習題

8 編寫乙個程式,將字串str2中的全部字元複製到字串str1中。要求 不能使用strcpy函式。12分 include definemaxlen 20 假設 str2 的長度不超過 str1 的長度 voidstrcopy char str1,char str2 intmain 9 3 20分 從...