タイトル説明
人々は非常に明確なチェスをする:女王は、水平、垂直、対角のステップ数に別の部分を食べることができません。どのようにチェス盤の8つのクイーン(8×8の正方形)、彼らは誰でも食べることができないように!これは有名な8つのクイーン問題です。
エントリー
整数n(1 <= N <= 10)
輸出
各出力線は、一つのアプローチ、女王は、隣接する二つの数は、辞書順の出力に応じて、スペースで区切られた各列内の各番組を順次出力の列番号に対応します。対応するプログラムは、-1の出力は存在しない場合。
サンプル入力
4
サンプル出力
2 4 1 3
3 1 4 2
ソースコード
#include <bits/stdc++.h>
using namespace std;
bool used[11];
int g[11][11];
int n;
bool flag=0;
bool check(int x,int y)
{
int xx = x,yy = y;
while(x >= 1&&y >= 1)
{
if(g[x][y] == 1) return 0;
x--,y--;
}
x = xx,y = yy;
while(x >= 1&&y <= n)
{
if(g[x][y] == 1) return 0;
x--,y++;
}
return 1;
}
void dfs(int u)
{
if(u == n + 1)
{
for(int i = 1;i <= n;i ++)
{
for(int j = 1;j <= n;j ++)
if(g[i][j] == 1)
{
printf("%d ",j);
break;
}
}
printf("\n");
flag = 1;
}
for (int i = 1;i <= n;i ++)
if(used[i] == 0&&check(u,i) == 1)
{
g[u][i] = 1;
used[i] = 1;
dfs(u + 1);
used[i] = 0;
g[u][i] = 0;
}
}
int main()
{
cin >> n;
memset(used,0,sizeof(used));
memset(g,0,sizeof(g));
dfs(1);
if(flag == 0) cout << -1 << endl;
return 0;
}