Figura (dos) -lista de adyacencia

1. La estructura del gráfico realizada por la lista de adyacencia es la siguiente:

Todos los vértices conectados a cada vértice están conectados por una lista enlazada, y la secuencia de la conexión no está en ningún orden en particular.

En segundo lugar, la implementación del código

#include <iostream>
#include <list>

using namespace std;

class Vertex
{
public:
	Vertex(char lab) :label(lab) {}

private:
	char label;

};


template <class T>
class Graph
{
public :
	Graph(int maxVertex) :VertexMax(maxVertex)
	{
		nVertex = 0;

		VertexList = new T*[maxVertex];

		HeadNodes = new list<int>[maxVertex];
	}

	~Graph()
	{
		delete[] VertexList;
		delete[] HeadNodes;
	}

	void addVertex(T* v);            //添加顶点
	void addEdage(int start,int end); //添加边
	void printVertex(void);			//打印顶点
	void printAdjList(void);		//打印顶点的连接关系

private:
	T** VertexList;        //用来存放顶点
	list<int>* HeadNodes;  //顶点的连接关系数组

	int VertexMax;        //最大顶点个数
	int nVertex;		  //当前顶点个数


};

template<class T>
void Graph<T>::addVertex(T *v)
{
	VertexList[nVertex++] = v;
}

template<class T>
void Graph<T>::addEdage(int start, int end)
{
	HeadNodes[start].push_back(end); //将end添加到start的末尾 
}

template<class T>
void Graph<T>::printVertex(void)
{
	for (int lop = 0; lop < nVertex; lop++)
		cout << *VertexList[lop] << " ";

	cout << endl;
}

template<class T>
void Graph<T>::printAdjList(void)
{
	for (int lop = 0; lop < nVertex; lop++)
	{ 
		cout << lop << "->";
		for (list<int>::iterator iter = HeadNodes[lop].begin(); iter != HeadNodes[lop].end(); iter++)  //用迭代器来遍历
			cout << *iter << " -> ";
		cout << endl;
	}
}


int main()
{
	Graph<char> gp(5);

	char a('a');
	char b('b');
	char c('c');
	char d('d');
	char e('e');

	gp.addVertex(&a); //0
	gp.addVertex(&b); //1
	gp.addVertex(&c); //2
	gp.addVertex(&d); //3
	gp.addVertex(&e); //4

	gp.addEdage(0,1); //A-B
	gp.addEdage(0,3); //A-D
	gp.addEdage(1,0); //B-A
	gp.addEdage(1,4); //B-E
	gp.addEdage(2,4); //C-E
	gp.addEdage(3,0); //D-A
	gp.addEdage(3,4); //D-E
	gp.addEdage(4,3); //E-D
	gp.addEdage(4,1); //E-B
	gp.addEdage(4,2); //E-C

	gp.printVertex();
	gp.printAdjList();
 

	return 0;
    
}


resultado de la operación:

Supongo que te gusta

Origin blog.csdn.net/weixin_40204595/article/details/108731971
Recomendado
Clasificación