八皇后问题(算法)C++源代码
2015-01-30 19:19
274 查看
//八皇后问题,采用深度优先的算法 时间 2014-3-24
#include
using namespace std;
int num; //八皇后解的个数
int n;
//判断宫格大小
char p;//控制是否输出所有结果
int mg[100][100];
typedef struct
//堆栈中存放皇后所在位置的结构
{
int x;
int y;
}Point;
typedef struct
//定义堆栈,存放皇后数据
{
Point
data[50];
int
top;
}Que;
//judge()功能:判断所放皇后的位置是否合理。合理返回值为true,否则为false
//judge()算法:通过所在点的位置分别从该列,该左上斜线,该右上斜线
//
找出是否存在皇后,并判断合理性
bool judge(int x,int y)
{
int
i,j;
j=y;
for(i=0;i
{
if(i==x)
continue;
if(mg[i][j]==1)
return false;
}
i=x,j=y;
while(i!=0&&j!=0)
{
i--;j--;
if(mg[i][j]==1)
return false;
}
i=x;j=y;
while(i!=0&&j!=n-1)
{
i--;j++;
if(mg[i][j]==1)
return false;
}
return
true;
}
//print()功能:输出解的个数。
void print(Que &Q)
{
cout<<"解的个数为:";
cout<<num<<endl;
system("pause");
}
//输出所有的解
void print2()
{
int
i,j;
for(i=0;i
{
for(j=0;j
{
cout<<mg[i][j]<<" ";
}
cout<<endl;
}
}
//Pro()功能:判断合理皇后的位置并存入堆栈,如果问题无解返回值为false,否则为true
//Pro()算法:
//
1.从方格(0,0)位置开始放入皇后
//
2.增加行数比如从(1,0)放入皇后,如果合理增加行数,否则增加列数
//
3.如果列数一直到宫格最后一列也不合理,返回上一行,对上一行皇后列数加1,重复步骤2,3
//
4.如果在最后一行找到合理皇后的位置,程序有解,num+1,重复步骤3。
bool Pro()
{
Que
Huang;
Huang.top=-1;
bool
find;
find=false;
int
i=1,j,k=0;
Huang.top++;
//将(0,0)放入皇后并压入堆栈
Huang.data[0].x=1;
Huang.data[0].y=1;
mg[0][0]=1;
#include
using namespace std;
int num; //八皇后解的个数
int n;
//判断宫格大小
char p;//控制是否输出所有结果
int mg[100][100];
typedef struct
//堆栈中存放皇后所在位置的结构
{
int x;
int y;
}Point;
typedef struct
//定义堆栈,存放皇后数据
{
Point
data[50];
int
top;
}Que;
//judge()功能:判断所放皇后的位置是否合理。合理返回值为true,否则为false
//judge()算法:通过所在点的位置分别从该列,该左上斜线,该右上斜线
//
找出是否存在皇后,并判断合理性
bool judge(int x,int y)
{
int
i,j;
j=y;
for(i=0;i
{
if(i==x)
continue;
if(mg[i][j]==1)
return false;
}
i=x,j=y;
while(i!=0&&j!=0)
{
i--;j--;
if(mg[i][j]==1)
return false;
}
i=x;j=y;
while(i!=0&&j!=n-1)
{
i--;j++;
if(mg[i][j]==1)
return false;
}
return
true;
}
//print()功能:输出解的个数。
void print(Que &Q)
{
cout<<"解的个数为:";
cout<<num<<endl;
system("pause");
}
//输出所有的解
void print2()
{
int
i,j;
for(i=0;i
{
for(j=0;j
{
cout<<mg[i][j]<<" ";
}
cout<<endl;
}
}
//Pro()功能:判断合理皇后的位置并存入堆栈,如果问题无解返回值为false,否则为true
//Pro()算法:
//
1.从方格(0,0)位置开始放入皇后
//
2.增加行数比如从(1,0)放入皇后,如果合理增加行数,否则增加列数
//
3.如果列数一直到宫格最后一列也不合理,返回上一行,对上一行皇后列数加1,重复步骤2,3
//
4.如果在最后一行找到合理皇后的位置,程序有解,num+1,重复步骤3。
bool Pro()
{
Que
Huang;
Huang.top=-1;
bool
find;
find=false;
int
i=1,j,k=0;
Huang.top++;
//将(0,0)放入皇后并压入堆栈
Huang.data[0].x=1;
Huang.data[0].y=1;
mg[0][0]=1;
相关文章推荐
- 八皇后算法-算法设计-C++源代码 -good code
- 采用 CAMSHIFT 算法快速跟踪和检测运动目标的 C/C++ 源代码
- 农历天干地支算法源代码大全(javascript、vbscript、C#、flash、C++、C等等)
- 【算法】约瑟夫问题--C++源代码(g++ 7.2.0)
- 【算法】Shell排序--C++源代码(VS2015)
- 从零开始学C++之STL(六):变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)
- 从零开始学C++之STL(六):变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)
- C++之STL(六):变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)
- 【源代码】C++实现严蔚敏数据结构所有算法(一)线性表-顺序表
- 【算法】快速排序--C++源代码(VS2015)
- c++求集合幂集 源代码及算法优化
- FPGA机器学习之蚁群算法的源代码C++
- 快速傅里叶变换(蝶形算法c++源代码)
- 【算法】分而治之(DivideAndConquer) -- C++源代码(VS2015)
- 算法导论 第13章 红黑树 C++源代码
- 贪心算法之埃及分数问题(附c++源代码)
- c++画扇形的算法或源代码
- C++数据结构--回溯算法--八皇后问题
- 【算法】斐波那契数列--C++源代码(VS2015)
- C++ STL源代码学习之算法篇