已知图采用邻接表存储方式,试写出删除边(vi,vi)(对于无向图)或删除弧(对于有向图)的算法。

admin2014-12-25  7

问题 已知图采用邻接表存储方式,试写出删除边(vi,vi)(对于无向图)或删除弧i,Vi>(对于有向图)的算法。

选项

答案 void DeleteEdge(ALGraph&G,int i,int J) { /*删除用邻接表存储的无向图G中的边(i,j)*/ P=G.vertices[i].firstarc;pre=NULL;/*pre是前趋*/ while(p) if(P一>adjvex==j) {if(pre==NULL) G.vertices[i].firstarc=P一>nextarc; elsepre一>nextarc=P一>nextarc; free(p);break; } else{pre=p;P=P一>nextarc;) P=G.vertices[j].firstarc; pre=NULL; /*查找另一个顶点的邻接点*/ while(p) if(P一>adjvex==i) {if(pre:=NULL) G.vertices[j].firstarc=P一>nextarc; else pre一>nextarc=P一>nextarc; free(p);break; } else{pre:pjP=P一>nextarc;} }

解析 本题只给出对无向图的操作,由于图采用邻接表存储,根据输入的边(Vi,vj),分别找出两顶点在图中的位置i和j,然后在各自的邻接表链表中删除相应的结点。算法描述如下。
转载请注明原文地址:https://kaotiyun.com/show/eaVx777K
0

相关试题推荐
最新回复(0)