Triple.h
//用二維數組初始化每條邊的值
template<class T>
class Triple
{
public:
int data[][];
Triple()
{
}
/*Triple(int arr[][],int n)
{
for(int i = ;i < n;i++)
{
this->data[i][] = arr[i][];
this->data[i][] = arr[i][];
this->data[i][] = arr[i][];
}
}*/
~Triple()
{
}
};
Ebox.h
//邊節點
template<class T>
class Ebox
{
public:
Ebox()
{
}
int mark;
int vertex_i;
int vertex_j;
int value;
Ebox *i_link;//指向頂點I有關的下一條邊
Ebox *j_link;//指向頂點J有關的下一條邊
};
LinkedMatrix.h
//頂點
#include"Ebox.h"
template<class T>
class LinkedMatrix
{
public:
int data;//頂點名稱
Ebox <T>*First_edge;//指向邊鍊
LinkedMatrix()
{
}
};
Adjacency_mul.h
#include"LinkedMatrix.h"
#include"Triple.h"
#define MAX_INT 12345678
template<class T>
class AdjlistGraph
{
private:
int n;//定點數
LinkedMatrix <int> *adjlist;//鄰接表
int path[][];//記錄兩點最短路徑
int dist[][];//記錄最短路徑的值
public:
AdjlistGraph()
{
this->n = ;
}
AdjlistGraph(int vertices[],int vertexCount,Triple<int>*edges,int edgeCount)
{
int i;
this->n = vertexCount;
adjlist = new LinkedMatrix<int>[vertexCount];
// adjlist = new LinkedMatrix[this->n];
for( i = ;i < vertexCount;i++)
{
adjlist[i].data = vertices[i];
adjlist[i].First_edge = NULL;
}
for(i = ;i < edgeCount;i++)
{
Ebox<T> *p = new Ebox<T>;
p->vertex_i = edges->data[i][];
p->vertex_j = edges->data[i][];
p->value = edges->data[i][]; //頭插邊節點
p->i_link = adjlist[p->vertex_i].First_edge;
p->j_link = adjlist[p->vertex_j].First_edge ;
adjlist[p->vertex_i].First_edge = adjlist[p->vertex_j].First_edge = p;
}
}
void Mark_unvisited()
{
//标記一條邊是否被通路過
int i;
Ebox<T>*p;
for(i = ;i < this->n;i++)
{
p = adjlist[i].First_edge;
while(p) //每個節點相鄰的邊都初始化
{
p->mark = ;
if(p->vertex_i == i)
{
p = p->i_link;
}
else
p = p->j_link;
}
}
}
void Display()
{
//輸出邊
int i;
Ebox<T>*p;
Mark_unvisited();
for(i = ;i < this->n;i++)
{
p = adjlist[i].First_edge;
while(p)
{
if(p->vertex_i == i)
{
if(p->mark == )
{
cout << p->vertex_i << "---" << p->vertex_j << "'s value = " << p->value <<endl;
p->mark = ;
}
p = p->i_link;
}
else
{
if(p->mark == )
{
cout << p->vertex_i << "---" << p->vertex_j << "'s value = " << p->value <<endl;
p->mark = ;
}
p = p->j_link;
}
}
}
}