一. 题目
二. 思路
dfs, 行col,dg,udg。
//对角 y=x+b b=y-x+n
//反对角 y=-x+b, b=y+x
y是u, x是i。
三. 代码
import java.util.*;
import java.io.*;
public class Main
{
static final int N = 20;
static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static String[] rs;
int n;
char[][] g = new char[N / 2][N / 2];
boolean[] col = new boolean[N], dg = new boolean[N], udg = new boolean[N];
public static void main(String[] args) throws Exception
{
Main main = new Main();
main.work();
}
void dfs(int u) throws Exception
{
if (u == n)//到达第n行
{
for (int i = 0; i < n; ++i)
{
StringBuilder sb = new StringBuilder();
for (int j = 0; j < n; ++j)
sb.append(g[i][j]);
sb.append('\n');
bw.write(sb.toString());
}
bw.newLine();
return;
}
for (int i = 0; i < n; ++i)
if (!col[i] && !dg[u - i + n] && !udg[u + i])
{
g[u][i] = 'Q';
col[i] = dg[u - i + n] = udg[u + i] = true;
dfs(u + 1);
g[u][i] = '.';
col[i] = dg[u - i + n] = udg[u + i] = false;
}
}
void work() throws Exception
{
rs = br.readLine().split(" ");
n = Integer.parseInt(rs[0]);
for (int i = 0; i < n; ++i)
Arrays.fill(g[i], '.');
dfs(0);
bw.close();
}
}