这是我写的图的邻接表添加一条边的函数,仅供参考
有两个函数,我的这个就是在最后一个邻接点上接上的,具体思路就是先设一个指针,让指针一直循环到邻接表的尾端,然后插入新边
template<class T>
bool ALGraph<T>::InsertEdge(const T& vex1,const T& vex2,int wgh)
{
//找到两个顶点在邻接表中的序号,分别赋值给v1,v2
//两个顶点中只要有一个在图的顶点表中未找到,则返回
int v1=LocateVertex(vex1);
int v2=LocateVertex(vex2);
if (v1==-1||v2==-1)
{
return false;
}
//为第一个顶点的邻接表中增加一条边
vertices[v1].AppendEdge(v2,wgh);
//如果为无向图,则必须在另一节点的邻接链表中增加一条边
if (style==UDG||style==UDN)
{
vertices[v2].AppendEdge(v1,wgh);
}
numEdges++;
return true;
}
template<class T>
bool VertexNode<T>::AppendEdge(int v,int wgh)
{
EdgeNode*p=edgeList;
EdgeNode*q=NULL;
//找到链表中末节点,末节点的指针赋值给q,如果发现有一个节点的adjVex的值
//于v相同,则返回false
while (p!=NULL)
{
if (p->adjVertex==v)
{
return false;
}
q=p;
p=p->next;
}
//在邻接表的最后加上一条边
p=new EdgeNode(v,wgh);
if (q==0)
{
edgeList=p;
}
else
q->next=p;
return true;
}
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。