#include <stdio.h>#include <stdlib.h>#define max 8int queen[max], sum=0; /* max為棋盤最大坐標(biāo) */void show(){ /* 輸出所有皇后的坐標(biāo) */ for(int i = 0; i < max; i++){ PRintf("(%d,%d) ", i, queen[i]); } printf("/n"); sum++;}int check(int n){ /* 檢查當(dāng)前列能否放置皇后 */ for(int i = 0; i < n; i++){ /* 檢查橫排和對(duì)角線上是否可以放置皇后 */ if(queen[i] == queen[n] || abs(queen[i] - queen[n]) == (n - i)){ return 1; } } return 0;}void put(int n){ /* 回溯嘗試皇后位置,n為橫坐標(biāo) */ for(int i = 0; i < max; i++){ queen[n] = i; /* 將皇后擺到當(dāng)前循環(huán)到的位置 */ if(!check(n)){ if(n == max - 1){ show(); /* 如果全部擺好,則輸出所有皇后的坐標(biāo) */ } else { put(n + 1); /* 否則繼續(xù)擺放下一個(gè)皇后 */ } } }}int main(){ put(0); /* 從橫坐標(biāo)為0開始依次嘗試 */ printf("%d", sum); return 0;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注