您的位置:首页 > 产品设计 > UI/UE

Leetcode:N-Queens II

2014-11-17 12:59 246 查看
N-Queens II:Follow up for N-Queens problem.Now, instead outputting board configurations, return the total number of distinct solutions.跟上一题的方法一样,只是不用打印棋盘,只需要用一个变量记录可行解的个数即可。在网上看到一个代码,充分利用了指针,运行速度十分之快。看来要提高代码的运行效率,灵活运用指针是个好办法。
class Solution {
private:
bool *row, *column, *diagonal, *r_diagonal;
int count;

public:
void init(int n) {
row = new bool
;
memset(row, true, sizeof(bool) * n);
column = new bool
;
memset(column, true, sizeof(bool) * n);
diagonal = new bool[n * 2];
memset(diagonal, true, sizeof(bool) * n * 2);
r_diagonal = new bool[n * 2];
memset(r_diagonal, true, sizeof(bool) * n * 2);

count = 0;
}

void del() {
delete [] row;
delete [] column;
delete [] diagonal;
delete [] r_diagonal;
}

void search(int n, int num) {
if (num == n) {
count++;
return;
}

for (int i = 0; i < n; i++) {
if (row[i] && column[i] && diagonal[i + num] && r_diagonal[i - num + n]) {
row[i] = false;
column[i] = false;
diagonal[i + num]  = false;
r_diagonal[i - num + n] = false;

search(n, num + 1);

row[i] = true;
column[i] = true;
diagonal[i + num]  = true;
r_diagonal[i - num + n] = true;
}
}
}

int totalNQueens(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
init(n);
search(n, 0);
del();
return count;
}
};
memset()函数:memset是计算机中C++语言函数。将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,其返回值为指向s的指针。void *memset(void *s, int ch, size_t n);函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体数组进行清零操作的一种最快方法。
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: