#include <stdio.h>
#include <iostream.h>
#define QueenNum 8
void output(int solution[QueenNum])
{
for(int i=0;i<QueenNum;i++)
{
cout<<solution[i]<<" ";
}
cout<<"\n";
}
int judge(int solution[QueenNum])
{
for(int i=0;i<QueenNum;i++)
{
for(int j=0;j<QueenNum;j++)
{
if(solution[j] ==0)
{
cout<<"incomplete solution";
output(solution);
return 1; //incomplete solution
}
else if(i != j && (solution[i] == solution[j] || solution[i]-solution[j] == i-j || solution[i]-solution[j] == j-i) )
{
cout<<"Error\n";
return 0; //Error solution
}
}
}
return 2; //right solution
}
int main(void)
{
int solution[QueenNum];
int k = 0;
bool flag = false;
for(int i=0;i<QueenNum;i++)
{
solution[i] = 0;
}
int test[QueenNum] = {2,4,3,1};
cout<<"====="<<judge(test);
while(k>=0)
{
while(solution[k]<QueenNum)
{
solution[k] = solution[k]+ 1;
if(judge(solution) == 2)
{
flag = true;
break;
}
else if(judge(solution) == 1)
{
k = k+1;
}
}
if(flag == true) //find the solution and exit
{
cout<<"========Solution!===========";
output(solution);
break;
}
solution [k] = 0;
k = k-1;
}
return 0;
}
回溯法在纸上画出来是很容易的,但是在具体实现时,个人认为有两点要注意:
1. judge方法,判断solution是否为正解、不完全解或者错误解
2. 当判断为错误解时,怎么回溯,上面的代码里回溯应该是solution[k]已经从1遍历到4,若判断1~4都是错误解,那么就只能回溯到上一步,让solution[k]取solution[k]+1的值
分享到:
相关推荐
本程序"AI_8Queen.zip_8queen_Help!_queen"采用VB6(Visual Basic 6)编程语言,利用爬山法来解决这一问题。 VB6是一种基于事件驱动的编程环境,广泛用于开发Windows应用程序。它的易用性和直观性使得初学者也能...
This is the code for 8 Queen prob in C...
8 queen implementation matlab
载的简单的8queen问题,很简单,有用得着的可以下载啦
八皇后问题是一个经典的回溯算法问题,源于19世纪由数学家鲁道夫·费迪南德·莱昂哈德·欧拉提出,旨在在8×8的国际象棋棋盘上放置八个皇后,使得任意两个皇后都无法通过同一行、同一列或对角线互相攻击。...
WinFrom的8 Queen拼图应用程序如何使用示例8Queen拼图:许可信息 该软件是开放源代码,根据GNU通用公共许可证版本3.0许可。 有关详细信息,请参见 。 该类库创建了一种处理结构化异常处理的方法,从Exception类继承...
用C实现,8皇后的经典算法,其中有注释,希望下载者可以多提宝贵意见,谢谢!
Matlab,国际象棋棋盘上,八个王后问题,要求王后相互之间都不会吃掉对方。
在一个8×8的棋盘里放置8个皇后,要求每个皇后两两之间不相"冲"发现很少有关于C#的算法,这是最近写的一个八皇后的算法我写了很详细的注解。
用VC++解决八皇后问题, 基因算法
标题中的"New-Text-Document-(5).rar_queen"暗示了这是一个关于“皇后问题”(8 Queen Problem)的Visual C++编程项目。8皇后问题是一个经典的计算机科学问题,源于国际象棋,目标是在8×8的棋盘上放置8个皇后,使得...
8 Queen's problem is an ancient and famous, the problem is the famous 19th century mathematician Gauss 1850 : in the 8x8 grid placed on the international chess 8 Queen's, making it unable to attack ...
八皇后问题-模拟退火技术 模拟退火技术的python / curses可视化解决了8个皇后问题
在IT领域,8-Puzzle和8-Queen问题都是经典的计算机科学问题,通常用于教学和研究算法,特别是搜索算法。在这个“BFS.rar_8 puzzle_8 puzzle java_queen”压缩包中,我们可以推测它包含了一个Java实现,用广度优先...
八皇后问题的C++实现 只是一个简单的深度优先求解,无聊做来玩的。
描述中提到的“genetic algorithm and 8queen with genetic”进一步确认了这个压缩包内容的核心——用遗传算法来解决八皇后问题。遗传算法的基本步骤包括初始化种群、选择、交叉和变异。在解决八皇后问题中,种群...
八皇后算法
8. **图标**:.ico文件,代表软件的图标。 9. **语言文件**:如.zh-CN.lproj或.lang,用于实现简体中文的本地化显示。 由于没有具体的文件列表,我们无法详细分析每个文件的作用。但是,从一般软件发布的角度来看,...
queen8求解方法的伪代码,有助于正确理解回溯法。
实现8后问题的实验报告内涵源代码和结果截图,简易。