📄 algorithm.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 + -