八皇后算法 非递归 非栈
来源:互联网 发布:淘宝买二手电脑靠谱吗 编辑:程序博客网 时间:2024/04/29 15:23
#include <cstdlib>
#include <iostream>
#include <string>
#include <iterator>
#include <vector>
#include <algorithm>
#include <fstream>
#include <functional>
#include <sstream>
using namespace std;
//输出一个序列
template<typename Iter>
void print(Iter first,Iter last,
const char* nm = "",
const char* sep = "/t",
ostream& os = cout)
{
if(nm != 0 && *nm != '/0')
os << nm << ": " << sep;
typedef typename iterator_traits<Iter>::value_type VT;
copy(first,last,ostream_iterator<VT >(os,sep));
os << endl;
}
//八皇后算法
void eightQueen()
{
short num = 0;
ofstream outf("eight_queen.txt"); //结果保存在eight_queen.txt中
short qp[9] = {0}; //qp[1]~qp[8]代表棋盘的8列,qp[i]=j表示第i列第j行放一个皇后
for ( short lie = 1; lie <= 8; ++lie)
{
short hang = 0;
for ( hang = qp[lie]+1; hang <= 8; ++hang)//此处用qp[lie]代替了栈的使用
{
bool isOk = true;
//检查当前列当前行可否放皇后
for (short i = 1; i < lie; ++i)
if ( qp[i] == hang || abs(qp[i]-hang) == abs(i-lie) )
{
isOk = false;
break;
}
if ( isOk )
{//当前位置可用
qp[lie] = hang;
if ( lie == 8 )
{
//如果是最后一列,表示搜索到一种放法,将其输出
ostringstream os;
os << ++num;
print(qp+1,qp+9,os.str().c_str(),"/t",outf);
}
else //否则跳出当前列,进入下一列
break;
}
}
if ( hang == 9 )
{//当前列已经搜索完,回退到上一列
qp[lie] = 0; //将当前列清零,保证下一次搜索该列时从第1行开始
lie -= 2; //for语句还要进行+1操作,减2才是回退1列
}
if ( lie == -1)
break; //第一列已经搜索完毕,算法结束
}
}
int main(int argc, char *argv[])
{
eightQueen();
system("pause");
}
#include <iostream>
#include <string>
#include <iterator>
#include <vector>
#include <algorithm>
#include <fstream>
#include <functional>
#include <sstream>
using namespace std;
//输出一个序列
template<typename Iter>
void print(Iter first,Iter last,
const char* nm = "",
const char* sep = "/t",
ostream& os = cout)
{
if(nm != 0 && *nm != '/0')
os << nm << ": " << sep;
typedef typename iterator_traits<Iter>::value_type VT;
copy(first,last,ostream_iterator<VT >(os,sep));
os << endl;
}
//八皇后算法
void eightQueen()
{
short num = 0;
ofstream outf("eight_queen.txt"); //结果保存在eight_queen.txt中
short qp[9] = {0}; //qp[1]~qp[8]代表棋盘的8列,qp[i]=j表示第i列第j行放一个皇后
for ( short lie = 1; lie <= 8; ++lie)
{
short hang = 0;
for ( hang = qp[lie]+1; hang <= 8; ++hang)//此处用qp[lie]代替了栈的使用
{
bool isOk = true;
//检查当前列当前行可否放皇后
for (short i = 1; i < lie; ++i)
if ( qp[i] == hang || abs(qp[i]-hang) == abs(i-lie) )
{
isOk = false;
break;
}
if ( isOk )
{//当前位置可用
qp[lie] = hang;
if ( lie == 8 )
{
//如果是最后一列,表示搜索到一种放法,将其输出
ostringstream os;
os << ++num;
print(qp+1,qp+9,os.str().c_str(),"/t",outf);
}
else //否则跳出当前列,进入下一列
break;
}
}
if ( hang == 9 )
{//当前列已经搜索完,回退到上一列
qp[lie] = 0; //将当前列清零,保证下一次搜索该列时从第1行开始
lie -= 2; //for语句还要进行+1操作,减2才是回退1列
}
if ( lie == -1)
break; //第一列已经搜索完毕,算法结束
}
}
int main(int argc, char *argv[])
{
eightQueen();
system("pause");
}
- 八皇后算法 非递归 非栈
- 八皇后问题的非递归算法
- 八皇后非递归法
- 八皇后问题 非递归
- 八皇后问题递归和非递归算法
- 八皇后之非递归算法(很好的解法)
- 八皇后问题的非递归算法实现
- 八皇后问题(递归+非递归)
- 八皇后问题--递归和非递归
- 八皇后问题(非递归版)
- 八皇后问题的非递归解法
- 关于八皇后的非递归解决
- 八皇后问题 回溯 非递归 java
- 八皇后问题的递归算法和非递归算法实现
- [回溯法]八皇后问题的递归与非递归算法
- 八皇后问题 C语言,递归,非递归,循环!
- 回溯 八皇后问题(递归和非递归)
- 八皇后问题:递归和非递归解法
- 我的大学生活
- Miscellaneous NOTES
- web架构设计经验分享
- Customize your own MFC message
- COM之套间的理解
- 八皇后算法 非递归 非栈
- Flex Builder2的基本知识[转]
- 巧设多DNS解析提高网通电信互访速度
- 做人要厚道
- 使用axis调用.net服务端
- css+div优点
- 《单干》:序言
- 第一个 AIR windows程序
- 管理与技术