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

📄 dijkstrasearch.h

📁 Dijkstra算法及demo实现
💻 H
字号:
#pragma once
#include "Node.h"

double DegreesToMeters(double x1, double y1, double x2, double y2);

///////////////////////////////////////////////////////////////////////////////////////////
//物理结点,根据实际来重写
typedef unsigned long ValueType;               //权重数据类型
#define OBJECT_MAXVALUE (0xffffffff)           //权重为最大(无限)

class SearchObject
{
public:
	SearchObject(){};
	~SearchObject(){};

public:
	unsigned long id;
	double        x;
	double        y;
	
public://以下方法必须实现
	inline ValueType GetValue(SearchObject &Object,int nType) const
	{
		return (ValueType)DegreesToMeters(x,Object.x,y,Object.y);
		/*ValueType tx=(ValueType)(x-Object.x);
		ValueType ty=(ValueType)(y-Object.y);
		return (ValueType)sqrt((double)(tx*tx+ty*ty));*/
	}

	inline int IsSame(SearchObject &so) const
	{
		if(x==so.x && y==so.y) 
			return 1;
		else
			return 0;
	}

	inline int operator== (SearchObject &so) const
	{
		return IsSame(so);
	}

	inline int operator!= (SearchObject &so) const
	{
		return !IsSame(so);
	}
};

typedef NodeList<SearchObject*> SearchObjectList;
///////////////////////////////////////////////////////////////////////////////////////////
//内存结点
typedef struct _MemSearchObject MemSearchObject;
typedef NodeList<MemSearchObject*> MemSearchObjectList;

typedef struct _MemSearchObject
{
	SearchObject          m_OwnerObject;           //结点数据
	MemSearchObjectList   m_pNextMemObjectList;    //相邻结点列表
	MemSearchObjectList   m_pLeftNextMemObjectList;//内部使用,还没有使用的剩余连接数
}MemSearchObject,*PMemSearchObject;
///////////////////////////////////////////////////////////////////////////////////////////
//内存临时搜索结果
typedef struct _MemSearchResult
{
	struct _MemSearchResult *m_pParent;            //线路父结点
	MemSearchObject         *m_pMemObject;         //线路末结点
	ValueType               m_vValue;              //路线总权重
}MemSearchResult,*P_MemSearchResult;

typedef NodeList<MemSearchResult*> MemSearchResultList;
///////////////////////////////////////////////////////////////////////////////////////////
//搜索实现对象
class CDijkstraSearch
{
public:
	CDijkstraSearch(void);
	~CDijkstraSearch(void);

public:
	bool InitSearch(MemSearchObject *pMemObjectList,long nObjectCount);
	bool StartSearch(MemSearchObject *pBeginObject,MemSearchObject *pEndObject,int nType,SearchObjectList *pSearchResult);

public:
	static bool ConnectObject(MemSearchObject *pFirst,MemSearchObject *pSecond,bool bBoth=true);

private:
	MemSearchObject *m_pMemObjectList;
	long             m_nObjectCount;
};

⌨️ 快捷键说明

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