⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algorithm.h

📁 绝对原创!用的是A*算法.解决8数码问题.绝对可用.初学者可以看看.
💻 H
字号:
#ifndef  _ALGORITHM_H_
#define  _ALGORITHM_H_

#include "StdAfx.h"
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>

//采用用链表实现的队列更适合程序
//3*3阶
#define ORDER 3

//#define BOOL bool
////#define FALSE false
////#define TRUE true
//

class CQNode //一个节点的数据类型
{
public:
	CQNode();
	CQNode(int initData[],int targetData[]);
	virtual ~CQNode();
	BOOL IsTarget(int targetData[]); //是否是目标节点?
	BOOL GetNewChild(int i,CQNode* pNewNode);//计算第i个孩子
	void Caculate(int targetData[]); //评估函数
	void Print();//显示结果

public:
    int m_nElemData[ORDER][ORDER]; //数码表数据
	int m_nSpace; //空白块的位置
	int m_nFloor;
	double m_value; //估价值
	CQNode* next;//下一个节点,这个主要是用在入队时用
	CQNode* nextResult;//结果的下一个节点,用于输出结果,这样可以不打乱队列中的关系
	CQNode* parant;//父节点
}; 

class CLinkQueue
{
public:
	CLinkQueue();
	virtual ~CLinkQueue();
	void Init(int initData[],int targetData[]);//初始化链表
	CQNode* DeQueue(); //出队
	void EnQueue(CQNode* pNewNode);//入队
	void UpdateOpen(CQNode* pNewNode);//更新Open表
	void UpdateClose(CQNode* pNewNode);//更新Close表
	CQNode* Output(CQNode* targetNode); //输出最终结果
    BOOL IsInOpen(CQNode* pNode);//是不是在Open表中?
	BOOL IsInClose(CQNode* pNode);//是不是在Close表中?
	BOOL IsEmpty();//是否为空表?
	void Destroy();//删除队列

private:
	CQNode* head;
    CQNode* front;
	CQNode* rear;	
};

BOOL ASearch(int initData[],int targetData[],CQNode** pResult,CLinkQueue& Q);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -