#include#include #include int queen[8]= {0};//皇后在某一列的行号 int count = 0;//统计有几种放法 void show();//用于显示皇后在8*8的位置 //判断当前行、列能否放置皇后,此函数会在放置皇后函数eightqueen中使用到 int check(int currentrow,int currentcolumn){ int column; for(column = 0;column < currentcolumn;column++){//从column=0列开始判断前面列是否与当前列有冲突 int row = queen[column];//column列皇后的行位置为row if(row == currentrow){//当前行有皇后,即column列皇后的行位置 return false; } int rowdiff = abs(currentrow - row);//计算行差 int columndiff = abs(currentcolumn - column);//计算列差 if(rowdiff == columndiff){//前面列有皇后在斜线上 return false; } } return true;//当前位置与前面列的皇后无冲突,可以放皇后 } // void eightqueen(int currentcolumn){//放置8个皇后 int row; for(row = 0;row < 8;row++){//尝试在当前列的每一行放置皇后 if(check(row,currentcolumn)){ queen[currentcolumn] = row;//在当前列的row行放皇后 if(currentcolumn != 7) { eightqueen(currentcolumn + 1);//放下一列的皇后 }else{ count++;//当correntcolumn等于7时8个皇后均放完了,完成一轮放置 show(); //为了看queen[8]的数值数据 } } } } //显示皇后的布局位置 void show(){ int row,column; printf("第%d种n",count); for(row = 0;row < 8;row++){ for( column = 0; column < 8;column++){ if(queen[column] == row){// 皇后每一列的行位置 printf("M"); } else{ printf("-"); } } printf("n"); } } int main(){ eightqueen(0); printf("总共%d种n",count); }



