leetcode 面試題 08 12 八皇后

2021-10-03 03:28:48 字數 2219 閱讀 2649

設計一種演算法,列印 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 解釋 第乙個 ...