如何用邻接表存储图结构
时间:2026-10-27 05:41:00
浏览:906次

我看不太懂这个程序,不过我有些过图的邻接表表示,看对你有没有帮助吧。#include #include #include typedef int QElemTyep;#include "queue.h"using namespace std;typedef int Status;#define MAX_VERTEX_NUM 30 //图的最大顶点数enum BOOL {False,True};BOOL visited[MAX_VERTEX_NUM]; //全局变量--访问标志数组typedef struct ArcNode{ //弧结点 int adjvex; //该弧所指向的顶点的位置 struct ArcNode *nextarc; //指向下一条弧的指针 InfoType *info; //保存边的信息,可以简单的改为 int w;}ArcNode; typedef struct VNode{ VertexType data; ArcNode *firstarc;}VNode,AdjList[MAX_VERTEX_NUM];class Graph{public: AdjList vertices; //记录顶点信息,指向第一条依附该顶点的弧的指针 int vexnum,arcnum; //图的当前顶点和弧数 int GraphKind; //图的种类,0---无向图,1---有向图 Graph(int vexnum,int arcnum,int kind) { this->vexnum=vexnum; this->arcnum=arcnum; this->GraphKind=kind; }}; void CreateGraph(Graph &G,VertexType *V,ArcType *VR){ //构造邻接表结构的图G int i; ArcNode *s; for(i=1;i<=G.vexnum;i++) //初始化指针数组 { G.vertices[i].data=V[i]; G.vertices[i].firstarc=NULL; } for(i=1;i<=G.arcnum;i++) { s=(ArcNode *)malloc(sizeof(ArcNode)); //生成一个弧结点 s->nextarc=G.vertices[VR[i].start].firstarc; //插入到邻接表中 s->adjvex=VR[i].end; G.vertices[VR[i].start].firstarc=s; if(G.GraphKind==0) { //若是无向图,再插入到终点的弧链中 s=(ArcNode *)malloc(sizeof(ArcNode)); s->nextarc=G.vertices[VR[i].end].firstarc; s->adjvex=VR[i].start; G.vertices[VR[i].end].firstarc=s; } }}