/** * * @param n int整型 the n * @return int整型 */ int count=0; int rec[20]; //做一下记录 下标i代表行,值rec[i]代表存的每一列 int check(int rec[],int x,int y) { int i; for(i=1;i<x;i++)//i从第一行到相应的行 { //rec[i]+i下标加值是主对角元素,i-rec[i]副对角线元素,x是行号,y是列号 if(rec[i]==y||i+rec[i]==x+y||i-rec[i]==x-y) { return 0; } } return 1; } void dfs(int row ,int n) { int col=0; if(row==n+1) { count++; return; } for(col=1;col<=n;col++) { if(check(rec,row,col))//检查这一列能不能放v { rec[row]=col; //假设在row这一行皇后放在col这列 dfs(row+1,n); //dfs深搜 rec[row]=0; //回溯 } } } int Nqueen(int n ) { // write code here dfs(1,n); return count; }