图(一):图的邻接表表示

//-------------图的邻接表存储表示-------------
#include<iostream>
using namespace std;
#define MVNum 100				//最大顶点数
typedef struct ArcNode			//边结点
{
	int adjvex;					//该边指向的顶点的位置
	struct ArcNode* nextarc;	//指向下一条边的指针
}ArcNode;
typedef struct VNode			//顶点信息
{
	int data;
	ArcNode* firstarc;			//指向第一条依附该顶点的边的指针
}VNode,AdjList[MVNum];			//AdjList表示邻接表类型
typedef struct					//邻接表
{
	AdjList vertices;
	int vexnum, arcnum;			//图的当前边数和顶点数
}ALGraph;
void CreateUDG(ALGraph& G)
{
	cin >> G.vexnum>>G.arcnum;
	for (int i = 0; i < G.vexnum; ++i)
	{
		cin >> G.vertices[i].data;
		G.vertices[i].firstarc = NULL;//初始化表头节点的指针域为NULL
	}
	
	for (int k = 0; k < G.arcnum; ++k)
	{
		int v1, v2;
		cin >> v1 >> v2;
		//i=LocateVex(G,v1);j=LocateVex(G,v2);//确定v1和v2在G中的位置,即顶点在G。vertices中的序号
		ArcNode* p1 = new ArcNode();//一个新的边结点
		//接下来的部分i代替v1,j代替v2
		p1->adjvex = v2;//邻接点序号为j
		p1->nextarc = G.vertices[v1].firstarc;
		G.vertices[v1].firstarc = p1;//将新结点插入顶点vi的边表头部

		ArcNode* p2 = new ArcNode();//一个新的边结点
		//接下来的部分i代替v1,j代替v2
		p2->adjvex = v1;//邻接点序号为v1
		p2->nextarc = G.vertices[v2].firstarc;
		G.vertices[v2].firstarc = p2;//将新结点插入顶点vj的边表头部
	}
}
posted @ 2021-08-08 21:10  小帆敲代码  阅读(21)  评论(0)    收藏  举报