#include <iostream>
using namespace std;
int n=0,count=0;
int grid[10]={0}; //grid[i]=j用来表示:第i行的棋子放在了第j列
bool valid(int row, int column){
for(int i = 1; i < row; i++){ //对行遍历,判断i行之前是否有与y冲突的!!
if( grid[i] == column ) return false;
if( grid[i] + i == row + column && (row-i) < 3) return false; //检测第i行与传入的(row,column)是否在对角线上
if( grid[i] - column == i - row && (row-i) < 3) return false; //y-y与x-x进行比较
}
return true;
}
void dfs(int row){
if(row==n+1) {count++;return;} //当所有行全部遍历一遍后,count++
for(int column = 1; column < n+1; column++ ){ //对每一列遍历
if( valid (row, column) ){ //检验row行column列是否可以放置棋子
grid[row] = column;
dfs(row+1);
grid[row] = 0;
}
}
}
int main()
{
scanf("%d",&n);
dfs(1); //从第一行开始
printf("%d",count);
return 0;
}
受伤的皇后-蓝桥-dfs
最新推荐文章于 2023-03-30 20:31:46 发布