博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
52. N-Queens II
阅读量:4260 次
发布时间:2019-05-26

本文共 1578 字,大约阅读时间需要 5 分钟。

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

这里写图片描述

思路:此题虽然是N皇后问题的变体,但还是可以用N皇后的思路去解决,只是用了一个set来存储合法的皇后

bool isNQueens(vector
& res){ for (int i = 0; i < res.size(); i++){ for (int j = i + 1; j < res.size(); j++){ if (i - j == res[i] - res[j] || i - j == res[j] - res[i])return false; } } return true;}void dfs_SolveNQueens(vector
& res, int pos, set
>& tt){ if (pos == res.size()){ if (isNQueens(res)){ tt.insert(res); } return; } for (int i = pos; i < res.size(); i++){ swap(res[i], res[pos]); dfs_SolveNQueens(res, pos + 1, tt); swap(res[i], res[pos]); }}int totalNQueens(int n){ if (n == 0)return 0; vector
temp; for (int i = 0; i < n; i++)temp.push_back(i); set
> res; dfs_SolveNQueens(temp, 0, res); return res.size();}

思路1可能有重复的计算量

bool safe(vector
& res, int c){ for (int i = 0; i < c; i++){ if (res[i] == res[c] || abs(res[i] - res[c] == abs(i - c))) return false; } return true;}void dfs_SloveNQueens(int &cnt, vector
& res, int n, int c){ if (c == n){ cnt++; return; } for (res[c] = 0; res[c] < n; res[c]++){ if (safe(res, c))dfs_SloveNQueens(cnt, res, n, c + 1); }}int totalNQueens(int n){ vector
res(n); int cnt = 0; dfs_SloveNQueens(cnt, res, n, 0); return cnt;}
你可能感兴趣的文章
oracle日志分析工具LogMiner使用
查看>>
数据仓库中捕获变化数据(CDC,Changed Data Capture)的四种手
查看>>
使用 PDI 和 Oracle CDC 来实现Oracle 数据库向其他数据库的数据同步
查看>>
oracle数据库是否归档和修改归档模式
查看>>
Oracle内存参数调优技术详解
查看>>
浅谈增值业务及双向运营支撑平台
查看>>
JMS开发指南
查看>>
在linux上执行远程命令(ssh、ftp)
查看>>
四大数据库性能比较
查看>>
andoird wifi 点对点连接笔记本的ad-hoc
查看>>
通过shell获取当前网络的出口IP地址(路由器外网IP)
查看>>
写给大家看的设计书阅读笔记1——设计的四大基本原则
查看>>
Makefile快速入门学习笔记
查看>>
Elasticsearch、Logstash 、kibana安装配置
查看>>
Spring Boot 解决跨域问题的 3 种方案!
查看>>
SQL 性能优化,开发注意事项
查看>>
logback配置文件模板
查看>>
指针函数和冒泡排序法算法案例
查看>>
批处理修改地址为静态和动态的方法
查看>>
easyui $.messager.alert失效问题
查看>>