設計一種演算法,列印 n 皇后在 n × n 棋盤上的各種擺法,其中每個皇后都不同行、不同列,也不在對角線上。這裡的「對角線」指的是所有的對角線,不只是平分整個棋盤的那兩條對角線。
注意:本題相對原題做了擴充套件
示例:輸入:4
輸出:[[".q..","...q","q...","..q."],["..q.","q...","...q",".q.."]]
解釋: 4 皇后問題存在如下兩個不同的解法。
[[".q..", // 解法 1
"...q",
"q...",
"..q."],
["..q.", // 解法 2
"q...",
"...q",
".q.."]
]
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define size 1000
bool placequeen(int posi, int posj, int n, int *queenpositionrow, int *queenpositioncol)
if (queenpositioncol[posj] != -1)
int j = 1;
for (int i = posi - 1; i >= 0; i--, j++)
if (posj + j < n && queenpositionrow[i] == posj + j)
}j = 1;
for (int i = posi + 1; i < n; i++, j++)
if (posj + j < n && queenpositionrow[i] == posj + j)
}return true;
}char ** generatequeenmap(int n, int *queenpositionrow, int *queenpositioncol)
map[i][queenpositionrow[i]] = 'q';
map[i][n] = 0;
}return map;
}void backtrack(char*** ret, int i, int n, int* returnsize, int** returncolumnsizes,
int *queenpositionrow, int *queenpositioncol)
int j;
for (int j = 0; j < n; j++)
}}/**
* 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*** solvenqueens(int n, int* returnsize, int** returncolumnsizes)
if (n < 1)
*returnsize = 0;
char ***ret = (char ***)malloc(size * sizeof(char **));
*returncolumnsizes = (int *)malloc(size * sizeof(int));
int* queenpositionrow = (int*)malloc(n * sizeof(int));
int* queenpositioncol = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
backtrack(ret, 0, n, returnsize, returncolumnsizes, queenpositionrow, queenpositioncol);
free(queenpositionrow);
free(queenpositioncol);
return ret;
}void testcase1(void)
printf("]\n");
}printf("]\n");}}
}int main()
leetcode 面試題 08 12 八皇后
面試題 08.12.八皇后 設計一種演算法,列印 n 皇后在 n n 棋盤上的各種擺法,其中每個皇后都不同行 不同列,也不在對角線上。這裡的 對角線 指的是所有的對角線,不只是平分整個棋盤的那兩條對角線。注意 本題相對原題做了擴充套件 示例 輸入 4 輸出 q q q q.q.q q q 解釋 4 ...
leetcode 面試題專題
面試題51.陣列中的逆序對 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。利用歸併排序,將陣列分成兩部分,前面一部分和後面一部分,進行歸併的時候,需要比較兩個陣列的數值大小,如果第二個陣列的值小的話,代表前乙個陣列剩下的都...
位元組面試題 leetcode
給定乙個迴圈陣列 最後乙個元素的下乙個元素是陣列的第乙個元素 輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 1。示例 1 輸入 1,2,1 輸出 2,1,2 解釋 第乙個 ...