八皇后問題是一個以國際象棋為背景的問題:如何能夠在
8×8 的國際象棋棋盤上放置八個皇后,使得任何一個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。
一共有92種答案。
c代碼實現如下:
#include <stdio.h>#define SIZE 8static int board[SIZE][SIZE];void insertQueue(int row);void displayQueue();int checkConflict(int row,int col);int main(void){ insertQueue(0); return 0;}//將皇后插入棋盤內void insertQueue(int row){ int coli; for(coli=0;coli<SIZE;coli++){ board[row][coli] = 1; if(checkConflict(row,coli)){ if(row ==(SIZE-1)){ displayQueue(); }else{ insertQueue(row+1); } } board[row][coli] = 0; }}//檢查新插入皇后是否已現有的皇后有衝突int checkConflict(int row,int col){ int rowi,coli;//檢查與左上方的皇后是否有衝突 if(row>0 && col>0){ for(rowi=row-1,coli=col-1; rowi>=0 && coli>=0; rowi--,coli--){ if(board[rowi][coli] == 1){ return 0; } } }//檢查與正上方的皇后是否有衝突 if(row > 0) { for(rowi=row-1;rowi>=0;rowi--){ if(board[rowi][col] == 1){ return 0; } } }//檢查與右上方的皇后是否有衝突 if(row>0 && col<(SIZE-1)){ for(rowi=row-1,coli=col+1; rowi>=0 && coli<SIZE; rowi--,coli++){ if(board[rowi][coli] == 1){ return 0; } } } return 1;}//將結果進行列印void displayQueue(){ static count=1; printf("%d\n",count++); int i,j; for(i=0;i<SIZE;i++){ for(j=0;j<SIZE;j++){ printf("%d ",board[i][j]); } printf("\n"); } printf("\n");}