`
sylinx_yqg
  • 浏览: 143399 次
  • 性别: Icon_minigender_1
  • 来自: 福建 漳州
社区版块
存档分类
最新评论

N皇后求解演示

阅读更多
大学期间学数据结构做的.选择解法--回溯法演示  命令--开始 下一个解 或者加速演示速度可以自动演示,代码如下:
/********************************************************************
*     文件名:Queen.cpp
*
*    文件描述:
*	         N皇后求解,这里求8皇后
*     
*     开发工具:turboc 2.0
* 
*     创建人:sylinx_yqg 2006年5月2日 
*
*     版本号:1.0 
**********************************************************************/
#include<stdlib.h>
#include<stdio.h>
#define LEN sizeof(queen)
#define NUM 8               /*这里指定为八皇后,可以改为N皇后*/

/*队列的结构体*/
typedef struct tagqueen
{
	int x,y;
	struct tagqueen*parent; /*指向双亲结点*/
	struct tagqueen*next;   /*指向下一个结点*/
}queen;

int y=0,num=0;              /*指明当前所在的列和已经求得的解的个数*/

queen*front,*rear;         /*队列的头尾指针*/

void DispResult();         /*输出结果*/

void EnterQueen(int x,int y); /*一个点入队列*/

int CheckChees(queen*current,int x,int y);/*检查是否可以在当前位置下子*/



/*********************************
一个结点入队列
**********************************/
void EnterQueen(int x,int y)
{
	queen*lp=(queen*)malloc(LEN);
	lp->x=x;
	lp->y=y;
	lp->parent=front;
	lp->next=NULL;
	rear->next=lp;        /*尾指针将新加进的结点加进链表中*/
	rear=rear->next;      /*尾指针下移,指向队尾*/
}

/************************************
输出一个解
*************************************/
void DispResult()
{
	queen*lp=front;
	int n=0;
	while(lp->parent!=NULL)/*检查是否已经下到了八个子*/
	{
		n++;
		lp=lp->parent;
	}
	if(n==NUM)           /*如果下到八个子,说明已经求到解,输出*/
	{
		lp=front;
		while(lp->parent!=NULL)
		{
			printf("(%d,%d)",lp->y,lp->x);
			lp=lp->parent;
		}
		printf("  %d\n",num++);  /*输出已得到的解的个数*/
	}
}

/****************************************
检查是否可以入队列,即可以下子
*****************************************/
int CheckChees(queen*current,int x,int y)
{
	queen*lp=current;
	while(lp->parent!=NULL)/*将当前结点与以前各结点比较*/
	{
		/*以下是四种不能下子的情况*/
		if((lp->x==x) || (lp->y==y) ||
			(lp->x+lp->y==x+y) ||
			(lp->x-lp->y == x-y))
            return 0;
		else
            lp=lp->parent; /*循环比较其前面的每个结点*/
	}
	return 1;
}

/********************************************************************
 主函数入口
 *******************************************************************/
void main()
{
	int i=0;
	queen*current=NULL;
	queen*head=(queen*)malloc(LEN);
	head->parent=NULL;/*分配头结点,不存储任何东西*/
	head->next=NULL;
	front=rear=head;
	for(;i<NUM;i++)
	{
		EnterQueen(i,y); /*第一行的八个结点入栈*/
	}
	while(front!=rear)   /*队列不为空*/
	{
		front=front->next;/*队列的头指针前移*/
		current=front;    /*取得当前队首元素,即出队*/
		y=(current->y==NUM-1) ? NUM-1 : current->y+1;/*指示当前接点的孩子的Y值*/
		if(y==NUM-1)
			DispResult();    /*如果已经到达最后一列,检测并输出结果*/
		for(i=0;i<NUM;i++)   /*检查所有的孩子*/
		{
			if(CheckChees(current,i,y))  /*是否能够入对,即不和皇后发生冲突*/
				EnterQueen(i,y);         /*元素入队列*/
		}
	}
}



  • 大小: 54.1 KB
分享到:
评论

相关推荐

    N皇后求解问题——递归和回溯方法

    N皇后问题是一个经典的计算机科学问题,它涉及到在N×N的棋盘上放置N个皇后,使得皇后之间不能互相攻击,即任何两个皇后都不能处于同一行、同一列或同一对角线上。这个问题常用于演示回溯算法和递归在解决约束满足...

    N皇后动态演示、可调节求解速度、查看所有可行解

    动态演示、可调节求解速度、查看所有可行解,

    用栈的n皇后问题源码+流程图

    **n皇后问题**是计算机科学中的一个经典问题,它的目标是在一个n×n的棋盘上放置n个皇后,使得任何两个皇后都不会在同一行、同一列或同一对角线上相互攻击。这个问题通常用来演示回溯算法和深度优先搜索(DFS)在...

    CSP最小冲突法解决n皇后问题

    在实际编程实现中,`CSPAlgorithms`可能包含了具体的代码示例,演示如何使用最小冲突法解决n皇后问题。这些代码通常会包含数据结构(如队列或栈用于存储待处理的变量)、搜索算法(如回溯或局部搜索)以及冲突检测和...

    N皇后问题求解(C++)

    N皇后问题是一个经典的计算机科学问题,它涉及到在N×N的棋盘上放置N个皇后,使得皇后之间不能互相攻击,即任何两个皇后都不能处于同一行、同一列或同一斜线上。这个问题通常用来演示和练习回溯算法以及数据结构的...

    N皇后问题 c++ 窗体演示(fableboy)

    在这个“N皇后问题 c++ 窗体演示(fableboy)”项目中,开发者使用C++编程语言,结合Microsoft Foundation Classes (MFC)库创建了一个图形化的用户界面,让用户能够直观地看到N皇后问题的解法过程。MFC是微软提供的...

    八皇后问题演示

    本软件运行此程序,可使用安装程序,序列号任意。 本程序演示八皇后问题的求解过程。 不安装也可使用,直接运行EightQueen.exe即可。

    n 皇后问题n 皇后 回溯法n 皇后 回溯法

    根据给定的信息,本文将详细解释“N皇后问题”及其回溯法求解方案。 ### N皇后问题概述 N皇后问题是指在一个N×N的棋盘上放置N个皇后,使得任意两个皇后都不会互相攻击(即任何两个皇后不能位于同一行、同一列或...

    n皇后动态可视化 简单 C++ MFC

    《C++ MFC实现的N皇后动态可视化》 在计算机科学领域,算法是解决问题的核心工具,而可视化技术则能帮助我们更好地理解这些算法的运行过程。本项目将这两种概念巧妙结合,通过C++编程语言,利用Microsoft ...

    C#版八皇后求解(带棋盘)问题

    C#版八皇后问题,带皇后图片,可以参考,入门级。学习数据结构用。回溯

    算法课设-N皇后问题

    算法课设中很经典的一个问题--N皇后问题,图形用户界面演示,求解过程

    python+pygame实现可视化8皇后问题/N皇后问题.zip

    1. **结果演示.mp4**:这是一个视频文件,展示了使用Python和Pygame实现的N皇后问题的运行效果。通过动态演示,用户可以看到皇后如何被放置在棋盘上,以及如何在满足条件的情况下进行移动和尝试,直至找到所有可能的...

    N皇后问题的各种解法

    N皇后问题是一个经典的计算机科学问题,它涉及到在N×N的棋盘上放置N个皇后,使得皇后之间不能互相攻击,即任何两个皇后都不能处于同一行、同一列或同一斜线上。这个问题通常用来演示和理解各种算法,如回溯、迭代法...

    基于遗传算法解决N皇后问题.rar

    1. 源代码:实现遗传算法求解N皇后问题的具体编程代码,可能是用Python、Java或其他编程语言编写,通过编程实现上述遗传算法的各个步骤,为学习者提供了直观的实现示例。 2. 课设报告:详细阐述了N皇后问题的背景、...

    N皇后(java代码).docx

    ### N皇后问题解析及Java实现 #### 一、N皇后问题概述 N皇后问题是一个经典的回溯算法案例,其目标是在一个N×N的棋盘上放置N个皇后,使得任意两个皇后不会在同一行、同一列或相同的对角线上。这个问题在计算机...

    N—皇后问题 实现平台:VC

    在回溯法求解N皇后问题的过程中,我们首先将皇后放置在棋盘的第一行,然后尝试在下一行放置皇后,同时确保它不与已放置的皇后冲突。如果找到一个可行的位置,我们就继续在下一行进行尝试。如果没有找到,我们会回溯...

    各种算法的Flash演示

    5. **回溯与分支限界**:如八皇后问题、N皇后问题、旅行商问题等。这些算法用于在大量可能的解决方案中寻找最优解。Flash演示可以模拟搜索过程,展示何时回溯和剪枝,有助于理解其搜索策略。 6. **贪心算法**:如...

Global site tag (gtag.js) - Google Analytics