LeetCode51:N-Queens
来源:互联网 发布:足球进球数据统计网站 编辑:程序博客网 时间:2024/06/08 18:17
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.![这里写图片描述](http://img.blog.csdn.net/20150609105847270)Given an integer n, return all distinct solutions to the n-queens puzzle.Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.For example,There exist two distinct solutions to the 4-queens puzzle:[ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."]]Show Tags
这道题是8皇后问题的推广,它推广到了n个皇后问题。但是解题思路还是一样的。
基本思路:
- 很明显n个皇后最开始的初始值应该是不同的,给n个皇后赋一个和它们下标相同的初值,这些初值构成一个数组。
- 求解这个数组的全排列,这是经典的无重复数字的数组的全排列问题。
- 根据皇后问题关系求出全排列中符合要求的排列。
- 对于每一个排列对应皇后的一种摆放位置,将它们按照指定格式输出。
排列的分析见这篇博客。
runtime:92ms
class Solution {public: vector<vector<string> > solveNQueens(int n) { vector<vector<string> > result; vector<int> nums; for(int i=0;i<n;i++) nums.push_back(i); vector<vector<int> > base=permutation(nums); auto iter1=base.begin(); for(;iter1!=base.end();iter1++) { vector<string> vecString; vector<int> vec=*iter1; for(int i=0;i<n;i++) { string str(n,'.'); str[vec[i]]='Q'; vecString.push_back(str); } result.push_back(vecString); } return result; } vector<vector<int> > permutation(vector<int> &nums) { vector<vector<int> >result; permutationChild(nums,0,result); return result; } void permutationChild(vector<int> &nums,int offset,vector<vector<int> >&result) { if(offset==nums.size()-1) { if(judge(nums)) result.push_back(nums); return; } auto base=nums.begin()+offset; auto iter=base; for(;iter!=nums.end();iter++) { swap(*base,*iter); permutationChild(nums,offset+1,result); swap(*base,*iter); } } bool judge(vector<int> & nums) { int length=nums.size(); for(int i=0;i<length;i++) { for(int j=i+1;j<length;j++) { if(abs(i-j)==abs(nums[i]-nums[j])) return false; } } return true; }};
0 0
- LeetCode51:N-Queens
- Leetcode51 N-Queens
- leetcode51&52 N-Queens
- Leetcode51. N-Queens
- LeetCode51——N-Queens
- leetcode51/52-N-Queens I/II(n皇后问题)
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-queens
- Qt中出现的错误总结
- hibernate 核心总结 (面试)
- 状态栏的隐藏以及再现需动画过度效果较好
- libvirt在使用virbr0并发启动虚拟机时死锁
- Onboard IOS App 启动画面插件
- LeetCode51:N-Queens
- SharePoint 2013 重复的管理账户错误:已添加项。字典中的关键字 所添加的关键字
- Ubuntu 14.04一步一步安装Openstack Kilo版本-4(ntp)
- C#使用SQL数据库按照时间查询方法及注意事项
- Ubuntu 12.04 x64 busybox
- golang vim ide 环境搭建
- cocoaPods 安装使用测试(AFNetworking为例)
- HDU1568 Fibonacci 斐波那契的前4位
- 【原创首发】针对java初学者的环境变量配置工具