[タイトル]説明
チェスボード上の8つのクイーンを置くことは、要件が直接すべてのクイーンの間でお互いを食べることはできません。
[決定]
(NO)
[出力]
指定された配列と出力形式の全8つのクイーン問題の解決策によって(サンプル参照)。
[入力サンプル]
(なし)
[]サンプル出力
なし.. 1
1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1
。2号
。1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 0
...以下省略
トピック分析:
最大の問題は、場所を腹立たしいされた列の出力では、それはボードの出力に示すために、法律ありませんどのように冒頭で、!
我々は最初のボードの異なる種類を格納するために二次元配列を作成することができ、その後、1次元配列bを作成する[i]を表し、私の列が占有していない(つまり、女王を置きます)。確立されたC [I + J]とD [I-J + 7]は占められていない対角配列を表します。(7は、負の配列インデックスがプログラムを防止するために)
、その後、最初の女王を置くから検索を開始、女王仕上げが8を置くか、出力が戻って一歩上の配置を満たすために、新しい配置を選択することはできません。
コード:
#include<iostream>
#include<cmath>
using namespace std;
int sum=0;
int a[9][9];//储存棋盘种类
int c[10],d[10];//分别控制两条对角线
int b[10];//占领第几列。
void search(int);
void print();
int main()
{
search(1);
return 0;
}
void search(int i)
{
for(int j=1;j<=8;j++)
{
if(b[j]==0&&c[i+j]==0&&d[i-j+7]==0)
{
a[i][j]=1;
b[j]=1;
c[i+j]=1;
d[i-j+7]=1;
if(i==8) print();
else search(i+1);
b[j]=0;
c[i+j]=0;
d[i-j+7]=0;
a[i][j]=0;
}
}
}
void print()
{
sum++;
cout<<"No. "<<sum<<endl;
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
cout<<a[j][i]<<" ";//按列输出
cout<<endl;
}
}
結果:
输出:
No. 1
1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0
No. 2
1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 0
No. 3
1 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1
0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0
No. 4
1 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0
No. 5
0 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0
No. 6
0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0
No. 7
0 0 0 0 1 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0
No. 8
0 0 1 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
(以下省略)