我天,这样也能过
我的大于12时就会超时
y总的大于13就会超时
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 110
char graph[N][N];
bool st[N][N];
int n;
bool check( int x, int y ){
for( int i = 1; i <= n && i >= 1; i ++ ){
if( i != x && st[i][y] ) return false;
}
for( int i = 1; i <= n && i >= 1; i ++ ){
if( i != y && st[x][i] ) return false;
}
for( int i = x, j = y; i <= n && i >= 1 && j <= n && j >= 1; i ++, j ++ ){
if( i != x && j != y && st[i][j] ) return false;
}
for( int i = x, j = y; i <= n && i >= 1 && j <= n && j >= 1; i --, j -- ){
if( i != x && j != y && st[i][j] ) return false;
}
for( int i = x, j = y; i <= n && i >= 1 && j <= n && j >= 1; i ++, j -- ){
if( i != x && j != y && st[i][j] ) return false;
}
for( int i = x, j = y; i <= n && i >= 1 && j <= n && j >= 1; i --, j ++ ){
if( i != x && j != y && st[i][j] ) return false;
}
return true;
}
void dfs( int x, int column ){
if( x == n ){
for( int i = 1; i <= n; i ++ ){
for( int j = 1; j <= n; j ++ ){
if( st[i][j] ) printf("%c", 'Q' );
else printf("%c", '.' );
}
printf("\n");
}
printf("\n");
return;
}
for( int i = 1; i <= n; i ++ ){
if( st[i][column] ) continue;
if( check( i, column ) ){
st[i][column] = true;
dfs( x + 1, column + 1 );
st[i][column] = false;
}
}
}
int main(){
scanf("%d", &n );
dfs( 0, 1 );
return 0;
}