1. 程式人生 > >GIS中最短路徑分析——Dijkstra演算法

GIS中最短路徑分析——Dijkstra演算法

template<class T,class E>
class Graphmtx:public Graph<T,E>{
	friend istream& operator>>(istream& in,Graphmtx<T,E>& G);
	friend ostream& operator<<(ostream& out,Graphmtx<T,E>& G);
public:
	Graphmtx(int sz);
	~Graphmtx(){
		delete []VerticesList;
		delete []Edge;
	}
	T getValue(int i){
		return i>=0&&i<numVertices?VerticesList[i]:NULL;		// 返回頂點陣列總的第i個元素 [8/26/2014 pan]
	}
	E getWeight(int v1,int v2){
		return (v1!=-1&&v2!=-1) ? Edge[v1][v2] : 0;		// 返回該邊的路徑代價 [8/26/2014 pan]
	}
	int getFirstNeighbor(int v);
	int getNextNeighbor(int v,int w);
	int NumberOfVertices(){return numVertices;}
	bool insertVertex(const T& vertex);
	bool insertEdge(int v1,int v2,E cost);
	bool removeVertex(int v);
	bool removeEdge(int v1,int v2);
public:
	T * VerticesList;	// 頂點表 [8/25/2014 pan]
	E ** Edge;	// 鄰接矩陣 [8/25/2014 pan]
	int getVertexPos(T vertex){
		for(int i=0;i<numVertices;i++){
			if(VerticesList[i]==vertex){
				return i;
			}
			return -1;
		}
	}
	int maxVertices;
	int numEdges;
	int numVertices;
};

template<class T,class E>
class MinPath{
public:
	E Distance;		// 當前最短距離 [8/26/2014 pan]
	T path;		// 上一個節點 [8/26/2014 pan]
public:
	MinPath(){this->Distance=maxValue;}
	~MinPath(){}
};
這裡要說明一下,所有的MinPath物件一定要利用預設的建構函式將其Diatance屬性賦值為maxValue,