八皇后非递归(仅使用一个数组且可扩展为N皇后问题)
2015-01-13 23:13
253 查看
</pre><pre name="code" class="cpp">/* Theme:八皇后(非递归) Coder:秒针的声音 Time:2015.1.13 */ #include <iostream> using namespace std; #include <stdlib.h> #include <math.h> int No=0; void Prin(int *q,int n) { cout<<"No."<<++No<<endl; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(q[i]!=j) cout<<'X'<<" "; else cout<<'Q'<<" "; } cout<<endl; } cout<<endl; } int IsStay(int *q,int cnt,int step) { for(int i=0;i<cnt;i++){ if(q[i]==step||abs(cnt-i)==abs(step-q[i])){ return 0; } } return 1; } void Queen(int n) { int cnt=0; int *Q=(int *)malloc(n*sizeof(int));//个数为行数储存列信息 for(int Col=0;1;Col++){ if(IsStay(Q,cnt,Col)){ Q[cnt++]=Col; if(cnt==n) Prin(Q,n); Col=-1; }else if(Col==n-1){ Col=Q[--cnt]; while(1){ if(Col!=n-1){ break; }else{ Col=Q[--cnt]; if(cnt==-1) return; } } } } } int main(void) { int n=8;//八皇后 Queen(n); return 0; }
相关文章推荐
- 八皇后扩展--n皇后问题 使用回溯法
- JavaScript使用递归遇到的一个问题
- 典型的递归问题:把一个数组里的组合全部列出,例如1 2,列出为1,2,12,21
- (2)int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
- [小算法] 使用递归将一个整数逆序放入一数组中
- 理解使用递归及堆栈的算法处理八皇后问题
- List的All方法使用问题:我用List1的All方法来确保List1的所有每个数组元素中是否包含Arr1中的任意元素,这个部分很难实现。 因为,没有一个数组中是否包含另一个数组中的任意元素这个功能
- 在C++中使用C中字符串数组的一个奇怪问题。
- (旋转数组问题)给定一个整数类型的循环有序数组,求循环数组的特定值,使用二分查找法(JAVA实现)
- 使用递归函数,将一个整型数组倒序输出。(数组用了随机数,每次的数组都不同,只用了调用,遗憾没用递归。。可以把for循环换成递归)
- 分别使用静态数组与动态数组建立一个区域 - 回复 "老A123" 的问题
- 八皇后问题的扩展,任意数量皇后问题的较快速解法
- unserialize的这个问题是由一个emlog论坛用户在使用时报错而发现的 问题表现情况如下: emlog缓存的保存方式是将php的数据对象(数组)序列化(serialize)后以文件的形式存放,
- 分享一个连接,python扩展包下载地址分享包括numpy,scipy等,解决了win8系统不能使用这些扩展包的问题!
- 使用Oracle 11g分区自动扩展的功能的一个小问题
- 使用递归判断一个数组是否为升序
- 剑指offer——面试题39:扩展问题判断一个树是否是平衡二叉树(递归)
- 八皇后问题使用排列的方法递归解决
- 打印给定一个数组序列的所有的排列的类n皇后问题
- C++递归问题之二——n皇后问题:以四、八皇后为例,给定n个皇后要求将它们放在一个n维矩阵中,任意两个皇后不能出现在同一行、列、主副对角线上,输出具体的摆放方式