\
这题就是第一次做的时候,斜线没考虑清楚,有四个方向斜线。
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
char temp[10][10]={0};
int visit[10][10]={0};
void in(int i,int j,int n){
for(int x=0;x<n;x++){
visit[x][j]++;
visit[i][x]++;
}
int x=i,y=j;
while(x<n&&y<n){
visit[x++][y++]++;
}
int p=i-1,q=j-1;
while(p>=0&&q>=0){
visit[p--][q--]++;
}
p=i-1;
q=j+1;
while(p>=0&&q<n){
visit[p--][q++]++;
}
p=i+1;
q=j-1;
while(p<n&&q>=0){
visit[p++][q--]++;
}
visit[i][j]-=2;
for(x=0;x<n;x++) temp[i][x]='.';
temp[i][j]='Q';
}
void out(int i,int j,int n){
for(int x=0;x<n;x++){
visit[x][j]--;
visit[i][x]--;
}
int x=i,y=j;
while(x<n&&y<n){
visit[x++][y++]--;
}
int p=i-1,q=j-1;
while(p>=0&&q>=0){
visit[p--][q--]--;
}
p=i-1;
q=j+1;
while(p>=0&&q<n){
visit[p--][q++]--;
}
p=i+1;
q=j-1;
while(p<n&&q>=0){
visit[p++][q--]--;
}
visit[i][j]+=2;
for(int x=0;x<n;x++) temp[i][x]=0;
}
void dfs(char*** array,int n,int* returnSize,int* column,int index,int count){
if(count>n||index>n) return;
if(count==n){
column[*returnSize]=count;
array[*returnSize]=(char**)malloc(sizeof(char*)*n);
for(int i=0;i<n;i++) array[*returnSize][i]=(char*)malloc(sizeof(char)*(n+1));
for(int i=0;i<n;i++){
for(int j=0;j<=n;j++){
array[*returnSize][i][j]=temp[i][j];
}
}
(*returnSize)++;
return;
}
for(int j=0;j<n;j++){
if(visit[index][j]==0){
in(index,j,n);
dfs(array,n,returnSize,column,index+1,count+1);
out(index,j,n);
}
}
}
char*** solveNQueens(int n, int* returnSize, int** returnColumnSizes) {
int t[10][10]={0};
*returnSize=0;
int* column=(int*)malloc(sizeof(int)*5000);
char*** array=(char***)malloc(sizeof(char**)*5000);
dfs(array,n,returnSize,column,0,0);
*returnColumnSizes=column;
return array;
}
结果:
标签:10,--,visit,51,++,int,皇后,array From: https://www.cnblogs.com/llllmz/p/18064127