图的邻接表建立问题for(k=0;karcnum;k++){cin>>v1>>v2;i=LocateV(G,v1);//返回顶点的位置j=LocateV(G,v2);p=new ArcNode;//以v2为入,v1为出建立一条弧p->adjvex=j;p->nextarc=G->Vertex[i].FirstArc;G->Vertex[i].FirstArc=p;//同理一v1

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 16:08:29
图的邻接表建立问题for(k=0;karcnum;k++){cin>>v1>>v2;i=LocateV(G,v1);//返回顶点的位置j=LocateV(G,v2);p=newArcNode;//以v

图的邻接表建立问题for(k=0;karcnum;k++){cin>>v1>>v2;i=LocateV(G,v1);//返回顶点的位置j=LocateV(G,v2);p=new ArcNode;//以v2为入,v1为出建立一条弧p->adjvex=j;p->nextarc=G->Vertex[i].FirstArc;G->Vertex[i].FirstArc=p;//同理一v1
图的邻接表建立问题
for(k=0;karcnum;k++)
{
cin>>v1>>v2;
i=LocateV(G,v1);//返回顶点的位置
j=LocateV(G,v2);
p=new ArcNode;
//以v2为入,v1为出建立一条弧
p->adjvex=j;
p->nextarc=G->Vertex[i].FirstArc;
G->Vertex[i].FirstArc=p;
//同理一v1为入,v2为出建立一条弧
p=new ArcNode;
p->adjvex=i;
p->nextarc=G->Vertex[j].FirstArc;
G->Vertex[j].FirstArc=p;
}
这样,在深度优先遍历时,假如输入a--b,a--c,a--d 得到的顺序是a d c b,怎么样才能得到abcd这个顺序呢?(输入顺序不变)
教材上都是这么写的,明显是把新的邻接点插入最左边(即当做头结点的第一个邻接点了),怎么改成在最后一个邻接点接上呢?
我想这么改,让指针pre沿链表查找,直到pre=NULL,再把新节点生成赋给pre.
但是好像无效.怎么改正呢?
p=new ArcNode;
pre=G->Vertex[i].FirstArc;
while(pre!=NULL)
{
pre=pre->nextarc;
}
p->adjvex=j;
p->nextarc=NULL;
pre=p;

图的邻接表建立问题for(k=0;karcnum;k++){cin>>v1>>v2;i=LocateV(G,v1);//返回顶点的位置j=LocateV(G,v2);p=new ArcNode;//以v2为入,v1为出建立一条弧p->adjvex=j;p->nextarc=G->Vertex[i].FirstArc;G->Vertex[i].FirstArc=p;//同理一v1
这是我写的图的邻接表添加一条边的函数,仅供参考
有两个函数,我的这个就是在最后一个邻接点上接上的,具体思路就是先设一个指针,让指针一直循环到邻接表的尾端,然后插入新边
template
bool ALGraph::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
bool VertexNode::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;
}

图的邻接表建立问题for(k=0;karcnum;k++){cin>>v1>>v2;i=LocateV(G,v1);//返回顶点的位置j=LocateV(G,v2);p=new ArcNode;//以v2为入,v1为出建立一条弧p->adjvex=j;p->nextarc=G->Vertex[i].FirstArc;G->Vertex[i].FirstArc=p;//同理一v1 建立一个无向图的邻接表存储 如何建立邻接表 设汁一个算法,建立无向图(n个顶点,e条边)的邻接表 画出图的邻接矩阵和邻接表 图的邻接表怎么画 图的邻接表怎么画 在线急求熟悉图的两种常用的存储结构,邻接矩阵和邻接表.1.熟悉图的两种常用的存储结构,邻接矩阵和邻接表.2.建立有向图,用邻接表存储结构存储.3.在邻接表存储结构上实现深度优先遍历 头插法建立邻接表和用尾插法建立邻接表有什么不同? 求多重邻接表的迪杰斯特拉算法无向图的多重邻接表不是邻接矩阵! 这张邻接表的图该怎么画怎么根据邻接表画图 将下面的有向图,画出其邻接表. 数据结构拓扑排序问题如图,试给出一种拓扑序列,若在它的邻接表存储结构中,每个顶点邻接表中的边结点都是按照终点序号从大到小链接的,则按此给出唯一一种拓扑序列4 0 2 3 5 7 6 8 91 4 0 2 3 a=60+kar=100+ka(r)'2=150+k (a乘以r的平方)求,a.怎么算哦, 图中在画邻接表的时候元素顺序可以不一样吗?例如,a和b,c,d都相连,我建立邻接表写a->b->c->d和a->c->b->d这样顺序颠倒了还是正确的吗? 已知一个无向图G=(V,E),其中V={V1,V2,V3,V4},其邻接矩阵如下0 1 1 11 0 1 11 1 0 01 1 0 0请还原G图,并画出G的邻接表根据邻接表,求从V1开始的深度遍历序列和广度遍历序列及其对应的生成树 地图着色问题的联想做到地图着色问题,想到每一种地图都可以转化成图的邻接问题,但是不是所有的一种图的邻接表示都有一种地图与之对应呢?如果不是,那么满足什么要求的邻接表示才可 《数据结构》以邻接表位存储,写出连通图的深度优先搜索法.