noj算法 8皇後打印 回溯法
阿新 • • 發佈:2018-09-30
問題 .... print tdi 8皇後 font cout true 形式
描述:
輸出8皇後問題所有結果。
輸入:
沒有輸入。
輸出:
每個結果第一行是No n:的形式,n表示輸出的是第幾個結果;下面8行,每行8個字符,‘A’表示皇後,‘.’表示空格。不同的結果中,先輸出第一個皇後位置靠前的結果;第一個皇後位置相同,先輸出第二個皇後位置靠前的結果;依次類推。
輸入樣例:
輸出樣例:
輸出的前幾行:
No 1:
A.......
....A...
.......A
.....A..
..A.....
......A.
.A......
...A....
No 2:
A.......
.....A..
.......A
..A.....
......A.
...A....
.A......
....A...
題解:
定義一個數組 c[ ] 用來存放第i行對應的是第j列,判斷每一行哪個位置能放,能放就繼續搜索下去,不能就回溯。
代碼:
#include <iostream> #include <string.h> #include <stdio.h> using namespace std; int k=1,c[8],a[8][8]; bool isok(int row) { for(int j=0;j!=row;j++){ if(c[row]==c[j]||row-c[row]==j-c[j]||row+c[row]==j+c[j])return false; } return true; } void queen(int row) { if(row==8){ printf("No %d:\n",k++); for(int i=0;i<8;i++){ for(int j=0;j<8;j++){ if(a[i][j]==1) cout<<‘A‘; else cout<<‘.‘; } cout<<endl; } }else { for(int col=0;col!=8;col++){ c[row]=col; if(isok(row)) {a[row][col]=1; queen(row+1);a[row][col]=0;} } } } int main() { queen(0); return 0; }
noj算法 8皇後打印 回溯法