八皇后问题使用排列的方法递归解决
2014-06-25 15:19
197 查看
#include<iostream> using namespace std; const int N=8; int count=0; void printQueen(int a[],int len) { //输出解 for(int i=0;i<len;++i) { for(int j=0;j<len;j++) { if(a[i]==j+1) cout<<"●"; else cout<<"□"; } cout<<endl; } } void Queen(int a[],int len,int begin) { //解函数,对数组元素排列 if(begin==len-1) { bool solve=true; for(int i=0;i<len-1;i++) { for(int j=i+1;j<len;j++) { if(a[i]-a[j]==i-j || a[i]-a[j]==j-i) { //判断是否在同一对角线 solve=false; break; } } if(solve==false) break; } if(solve) { count++; cout<<"第"<<count<<"种解:"; for(int i=0;i<len;i++) cout<<a[i]<<' '; cout<<endl; printQueen(a,len); } return; } //数组排列,递归 for(int i=begin;i<len;i++) { int tmp=a[i]; a[i]=a[begin]; a[begin]=tmp; Queen(a,len,begin+1); tmp=a[i]; a[i]=a[begin]; a[begin]=tmp; } } void Queen(int a[],int len) { if(a) Queen(a,len,0); } int main(void) { int queen ; for(int i=0;i<N;i++) queen[i]=i+1; Queen(queen,N); return 0; }
相关文章推荐
- 使用递归-分治方法解决汉诺塔问题
- Java使用Oracle遇到的最大游标超出问题及其解决方法
- 使用VS2005 CTP July调试WinForm的一个问题,解决方法与各位分享。
- 使用JasperReports合并多个报表的word文档问题解决方法
- 关于使用VS.Net2003调试器出现的问题及相关解决方法
- 在JBossPortal中使用MySQL5出现数据截断问题的解决方法
- 关于使用asp.net调试器出现的问题及相关解决方法
- SQL Server 2005:一个使用新创建的User的问题和解决方法
- [原创]SQL Server 2005:一个使用新创建的User的问题和解决方法
- JSP数据和JavaScirpt数据交互使用问题的一种解决方法
- 使用Apache Axis部署 Web服务时的常见问题及其解决方法
- [Nebula2]使用3dmax7,nmaxtoolbox导出模型到nebula2遇到的问题及解决方法
- 使用Apache Axis部署 Web服务时的常见问题及其解决方法
- 第一次使用jdbc连接postgre数据库碰到的问题及解决方法
- 使用Axis部署Web服务时的常见问题及其解决方法(转)
- 使用Axis部署Web服务时的常见问题及其解决方法(转)
- 递归方法的使用之一 -- 用递归进行排列组合
- 在从池中获取连接之前超时时间已过,所有池连接都已被使用并已达到最大池大小的问题解决方法
- Infragistics的NetAdvantage控件使用中遇到的问题及解决方法