052 - N-Queens II
2015-11-26 18:24
483 查看
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
static int Q;
static int retcur;
int locok(char **queen, int cur, int b)
{
int i,j;
for(i = 0; i< cur; i++)
for(j = 0; j < Q; j++) {
if (queen[i][j] == 'Q') {
if (i == cur || j == b) return 0;
if (abs(i - cur) == abs(j - b)) return 0;
}
}
return 1;
}
void x8q(char **queen, int cur)
{
if (cur == Q) return;
if (cur == Q - 1) {
int i;
for(i = 0; i < Q;i ++) {
if (locok(queen, cur, i)) {
queen[cur][i] = 'Q';
retcur++;
queen[cur][i] = '.';
}
}
} else {
int i;
for(i = 0; i < Q; i ++) {
if (locok(queen, cur, i)) {
queen[cur][i] = 'Q';
x8q(queen, cur + 1);
queen[cur][i] = '.';
}
}
}
}
int totalNQueens(int n)
{
int i, j;
retcur = 0;
char *queen[100] = {0};
for (i = 0; i < n; i++) {
queen[i] = (char *)malloc(sizeof(char) * n);
memset(queen[i], '.', n);
}
Q = n;
x8q(queen, 0);
return retcur;
}
int totalNQueens(int n)
{
int ret[] = {0, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712};
if (n <= 13) return ret
;
return -1;
}
Now, instead outputting board configurations, return the total number of distinct solutions.
static int Q;
static int retcur;
int locok(char **queen, int cur, int b)
{
int i,j;
for(i = 0; i< cur; i++)
for(j = 0; j < Q; j++) {
if (queen[i][j] == 'Q') {
if (i == cur || j == b) return 0;
if (abs(i - cur) == abs(j - b)) return 0;
}
}
return 1;
}
void x8q(char **queen, int cur)
{
if (cur == Q) return;
if (cur == Q - 1) {
int i;
for(i = 0; i < Q;i ++) {
if (locok(queen, cur, i)) {
queen[cur][i] = 'Q';
retcur++;
queen[cur][i] = '.';
}
}
} else {
int i;
for(i = 0; i < Q; i ++) {
if (locok(queen, cur, i)) {
queen[cur][i] = 'Q';
x8q(queen, cur + 1);
queen[cur][i] = '.';
}
}
}
}
int totalNQueens(int n)
{
int i, j;
retcur = 0;
char *queen[100] = {0};
for (i = 0; i < n; i++) {
queen[i] = (char *)malloc(sizeof(char) * n);
memset(queen[i], '.', n);
}
Q = n;
x8q(queen, 0);
return retcur;
}
int totalNQueens(int n)
{
int ret[] = {0, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712};
if (n <= 13) return ret
;
return -1;
}
相关文章推荐
- 051 - N-Queens
- Form Data 转换成 Request Palyload
- Storm UI启动却无法显示
- [UIViewController _loadViewFromNibNamed:bundle:] loaded the "One" nib but the view outlet was not se
- 进击的KFC:UI(九)UITableView 表示图
- IOS之UI -- 按钮UIButton的细节
- iOS开发UI篇—实现UItableview控件数据刷新
- easyui datagrid 的使用
- Machine Learning week 7 quiz: Unsupervised Learning
- UI_视图与视图控制器
- easyui tree 的使用
- UI_程序的基本结构
- Does anyone successfully use USB drive in Windows7 guest?
- 【APUE】2、第二章 UNIX标准及实现
- iOS 在UILabel显示不同的字体和颜色(转)
- 进击的KFC:UI(八)导航试图控制器,传值
- iOS 解决UITabBarItem选中图片默认为蓝色的方法
- iOS UITableViewCell的单选
- easyui tree/TreeGrid使用:逐级加载、指定节点刷新、全部展开
- RequireJS以及AMD规范入门实践