1. 程式人生 > >noj算法 8皇後打印 回溯法

noj算法 8皇後打印 回溯法

問題 .... 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皇後打印 回溯法