7.2.4 无向图(网)的邻接多重链表存储表示 建立多重链表的算法类似于建立图的邻接表,只要依次输入图的顶点和边的信息即可。 算法 7.2 void CreateGraph(AMLGraph &G) { // 生成无向图G的存储结构-邻接多重表 cin >> G.vexnum >> G.edgenum >>G.kind; // 输入顶点数、边数和类型 for (i=0; i<G.vexnum; ++i) { // 构造顶点数组 cin >> G.adjmulist[i].data; // 输入顶点 G.adjmulist[i].firstedge = NULL; // 初始化链表头指针为"空" }//for for (k=0; k<G.edgenum; ++k) { // 输入各边并构造邻接多重表 cin >> >> ; // 输入一条边的两个顶点 ipos = LocateVex(G,); jpos = LocateVex(G, ); // 确定和在G中位置,即顶点在G.adjmulist中的序号 p = new ArcNode; if (!pi) exit(1); // 存储分配失败 p->mark = unvisited; p -> ivex = ipos; p->jvex = jpos; // 对弧结点赋顶点"位置" if (G.kind==AN) cin >> w >> p; // 输入权值和其它信息存储地址 |
||||||||||
else { w=0; p=NULL; } p->weight = w; p->info = p; p->ilink = G.adjmulist[ipos].firstedge; G.adjmulist[ipos].firstedge = p; // 插入顶点 的链表 p->jlink = G.adjmulist[jpos].fistedge; G.adjmulist[jpos].firstedge = p; // 插入顶点 的链表 } //for } // CreateGraph |
|