图的邻接表建立问题for(k=0;karcnum;k++){cin>>v1>>v2;i=LocateV(G,v1);//

yingyang8312232022-10-04 11:39:541条回答

图的邻接表建立问题
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;

已提交,审核后显示!提交回复

共1条回复
Jovin1 共回答了24个问题 | 采纳率91.7%
这是我写的图的邻接表添加一条边的函数,仅供参考
有两个函数,我的这个就是在最后一个邻接点上接上的,具体思路就是先设一个指针,让指针一直循环到邻接表的尾端,然后插入新边
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;
}
1年前

相关推荐

邻接表与邻接矩阵的用法?都是二维的..,大小一样..但是矩阵是布尔,表是数,明显空间大,查起来明显矩阵是O[1],表最坏
邻接表与邻接矩阵的用法?
都是二维的..,大小一样..但是矩阵是布尔,表是数,明显空间大,查起来明显矩阵是O[1],表最坏O(n)但是.我这句话哪里不对
六侠镇淄衣捕头1年前1
我狂我可以000 共回答了25个问题 | 采纳率92%
邻接表有多种实现方式,比如最简单的动态链表,对于一个无向图,为每个节点建一个动态链表,储存的只是这个节点每个相邻的点,而在邻接矩阵中,对于每个节点需要把它与其他所有点的关系都表示出来(相邻为1,不相邻为0),空间复杂度明显是邻接矩阵大,至于查询两者各有千秋,如果只是查询两个点之间是否相邻,邻接矩阵当然更快,但如果是做dfs的话,找当前节点相邻的点,如果用邻接矩阵的话每次都要从1扫到n,如果用邻接表的话每次只需把当前节点邻接表后的点都取出来即可.
数据结构类:画出无向图(下附)的邻接矩阵和邻接表示意图,并写出每个顶点的度!
凯蕊1年前1
jssmzylj 共回答了16个问题 | 采纳率87.5%
邻接矩阵
v1 v2 v3 v4 v5 v1 0 1 0 1 0 v2 1 0 0 1 1 v3 0 0 0 1 1 v4 1 1 1 0 0 v5 0 1 1 0 0
邻接表
v1 -> v2 -> v4 v2 -> v1 -> v4 -> v5 v3 -> v4 -> v5
v4 -> v1 -> v2 -> v3 v5 -> v2 -> v3

v1 2
v2 3
v3 2
v4 3
v5 2
邻接表加边的算法如何写?在一个带权的有向图中,采用邻接表存储结构,采用出边表,即某个顶点的邻接边表是指以该结点为起点的边
邻接表加边的算法如何写?
在一个带权的有向图中,采用邻接表存储结构,采用出边表,即某个顶点的邻接边表是指以该结点为起点的边,存储结构定义如下。
typedef struct node{//边表结点
  int adjvex; //邻接点域
float weight; //边上的权重
  struct node *next; //链域
     //若要表示边上的权,则应增加一个数据域
}EdgeNode;
typedef struct vnode{ //顶点表结点
     VertexType vertex; //顶点域
     EdgeNode *firstedge;//边表头指针
  }VertexNode;
typedef VertexNode AdjList[MaxVertexNum];//AdjList是邻接
typedef struct{
    AdjList adjlist;//邻接表
    int n,e; 图中当前顶点数和边数
   }ALGraph;
写一个算法在图中插入一条边。加必要的注释。
虚无缥缈0071年前1
郑砚zy 共回答了26个问题 | 采纳率84.6%
不太用到,试着写一下
void InsertEdge(ALGraph *g,int startVex/*新边的出发顶点*/,int targetVex/*新边的目的顶点*/,float weight)
{
if(startVex < 0||startVex >= MaxVertexNum||targetVex < 0||targetVex >= MaxVertexNum)
{
printf("顶点错误");
return;
}
EdgeNode *pEdge = (EdgeNode*)malloc(sizeof(EdgeNode)); //创建新的EdgeNode
pEdge->adjvex = targetVex;//设置新EdgeNode中的目标节点
pEdge->weight = weight;
pEdge->next = g->adjlist[startVex].firstedge;//在VertexNode边链表的头部插入新边
g->adjlist[startVex].firstedge = pEdge;
}
// typedef VertexNode AdjList[MaxVertexNum];对于这一句,用AdjList创建的对象,比如AdjList al,al是一个数组,可以用al[0]访问,这个数组每个元素的类型是VertexNode
数据结构 :假设图G采用邻接表存储,试设计一个算法,求不带权无向连通图G中距离顶点v的最远的顶点?
数据结构 :假设图G采用邻接表存储,试设计一个算法,求不带权无向连通图G中距离顶点v的最远的顶点?
klum1年前1
侬本痴情 共回答了25个问题 | 采纳率92%
(1)每个点关联一个量d,让所有定点的d值都为0
(2)对v进行广度优先搜索
(3)bfs后d值最大的点就是离v最远的点.
在拓扑排序中,对有向图的存储,为什么要把邻接矩阵转化为邻接表
9562281年前1
叶迦门下行走 共回答了14个问题 | 采纳率100%
因为拓扑中两个结点只有一个单向边,用邻接表更节省空间,而且在实现拓扑排序时,查找下一个处理的结点,只需查找邻接表指针项为空的结点,查找平均复杂度为O(n)如果用邻接矩阵的话,必须从头开始扫描,平均复杂度为O(n^2)
问一道数据结构 求无向图和邻接表的习题
问一道数据结构 求无向图和邻接表的习题
麻烦老师讲解一下 ,设无向图有6个节点,依次输入的9条边为(1,2)(1,3)(1,5)(1,6)(2,3)(3,4)(3,5)(4,5)(5,6).1.画出无向图G.2.画出G的邻接表
面交相映新1年前0
共回答了个问题 | 采纳率
已知一个图的邻接矩阵或邻接表,如何判断此图是有向图还是无向图
luohuafeixu1年前1
wu_shi123 共回答了19个问题 | 采纳率94.7%
如果有对称元素 aij 和 aji 分别是1和0,那么一定是有向图(有一条有向边连接两点)
但如果所有的对应元素都相同,就无法判断是有向图还是无向图
求一个源代码要求显示图的邻接矩阵图的邻接表,深度广度优先遍历最小生成树PRIM算法KRUSCAL算法图的连通分
求一个源代码要求显示图的邻接矩阵图的邻接表,深度广度优先遍历最小生成树PRIM算法KRUSCAL算法图的连通分
1.显示图的邻接矩阵,图的邻接表,深度优先遍历,广度优先遍历,最小生成树PRIM算法,最小生成树KRUSCAL算法,图的连通分量.
2.当用户选择的功能错误时,系统会输出相应的提示.
3.通过图操作的实现,把一些实际生活中的具体的事物抽象出来
guoruan1年前1
cytonline 共回答了19个问题 | 采纳率94.7%
用C++实现的,希望对你有所帮助.#include #include using namespace std; #define int_max 10000#define inf 9999 #define max 20//…………………………………………邻接矩阵定义……………………typedef struct Arc...
试编写求无向图G的连通分量的算法.要求输出每一连通分量的顶点值.(设图G已用邻接表存储)
试编写求无向图G的连通分量的算法.要求输出每一连通分量的顶点值.(设图G已用邻接表存储)
我有一个答案了,但是不是很明白希望可以有人给我用通俗点的语言解释清楚,最好你可以再给我一个算法~
void dfs ( int v)
  {
visited[v]=1; printf ("%3d",v); //输出连通分量的顶点
p=g[v].firstarc;
while (p!=null)
  {
if(visited[p->adjvex]==0)
dfs(p->adjvex);
p=p->next;
}
  }
  void Count(AdjList g) //求图中连通分量的个数
  {
  int k=0 ;
  for (i=1;i
ruanwuyi1年前2
langzi2001958 共回答了22个问题 | 采纳率90.9%
你肯定还没看懂邻接表,adjvex就是顶点的数组地址,每个顶点都有自己的物理地址,通过数组来存储比较方便操作,不然怎么找到它,你想想.至于前面的算法,我想你看懂了邻接表之后看算法很简单了,这算法没什么技术含量.就是直接利用邻接表的特点
最后一题,,首先感谢为我解答上面两题的热心朋友~我是新手,只有几分,但还是求得了答案.编写在有n个顶点的有向图的邻接表上
最后一题,,
首先感谢为我解答上面两题的热心朋友~我是新手,只有几分,但还是求得了答案.
编写在有n个顶点的有向图的邻接表上计算某个顶点V的出度的函数.
#define MAX_VERTEX_NUM 20
typedef struct ArcNode{
int adjvex;
struct ArcNode*nextarc;
}ArcNode;
typedef struct Vnode{
Vertex Type data;
ArcNode*firstarc;
}Vnode,AdjList[MAX_VERTEX_NUM];
typedef struct{
AdjList vertices;
int vexnum,arcnum;
int kind;
}ALGraph;
oo独行人1年前1
CHEN CHEN_ee 共回答了12个问题 | 采纳率100%
int ComputeOutDegree(ALGraph G,Vnode V)
{
int count= 0;
ArcNode *p;
p=V->firstarc;
while(p){count++;p=p->nextarc;}
return count;
}
其实这个是最简单的,在用邻接表表示的有向图中第i 个链表中的结点个数只是顶点vi的出度,求顶点入度的难度稍微要复杂些,必须遍历整个邻接表.
usaco题目“田忌赛马”这道题目我第一次看到想到的是邻接表+二分图.但是我不会二分图最佳匹配,网络流也不太熟练.于是想
usaco题目“田忌赛马”
这道题目我第一次看到想到的是邻接表+二分图.但是我不会二分图最佳匹配,网络流也不太熟练.于是想到先求一次赢的最大匹配,再从剩余的马中求一次平的最大匹配.这样来求解对么?不对的话请给出一个反例谢谢.我只想知道对不对,为什么.发代码和建议我用其他方法的一律不采纳.
窗上的冰花1年前1
peter_he2000 共回答了17个问题 | 采纳率100%
这样是对的
设一个方案P中.共有W场,赢了N场,平了K场,则输了(W-N-K)场
那么该方案赢得的钱数为200N-200(W-N-K)=400N+200K-200W
因-200W一定..该题就是求最大的400N+200K
现在证明对于N最大,且在N最大的情况下K最大的方案P1,其赢得的钱设为T1,对任意方案Pi,T1>=Ti
1)对于方案Pi,如果Ni=N1,则Ki
大神在哪里!数据结构问题啊!用邻接表表示图进行深度优先遍历时,通常借助( )来实现算法。A.栈 B. 队列 C. 树 D
大神在哪里!数据结构问题啊!
用邻接表表示图进行深度优先遍历时,通常借助( )来实现算法。
A.栈 B. 队列 C. 树 D.图
jara1187171年前1
火焰山上的雪莲 共回答了18个问题 | 采纳率77.8%
不是说要用到栈,而是说用到栈的先进后出的算法而已,题目就是这么问的!
1.用邻接表表示图 广度优先搜索 通常采用什么实现算法 a 栈 b 队列 c 树 d图
1.用邻接表表示图 广度优先搜索 通常采用什么实现算法 a 栈 b 队列 c 树 d图
2.用邻接表表示图 深度优先搜索 通常采用什么实现算法
a 栈 b 队列 c 树 d图
marsbaby1年前1
ac80 共回答了18个问题 | 采纳率100%
广度优先用队列.深度优先用栈.
下面关于图的论述中正确的是a邻接表法只能用于有向图的存储,而相邻矩阵法对于有向图和无向图的存储都适用b任何有向图网络拓扑
下面关于图的论述中正确的是
a邻接表法只能用于有向图的存储,而相邻矩阵法对于有向图和无向图的存储都适用
b任何有向图网络拓扑排序的结果是唯一的
c有回路的图不能进行拓扑排序
d无向连通网络的最小生成树是唯一的
痞子啊赖1年前1
笑见 共回答了16个问题 | 采纳率93.8%
d
邻接矩阵和邻接表删除有向图或无向图的一条边的算法.急用.尽量简单些就好.
jinjoy1年前1
李逢浪 共回答了19个问题 | 采纳率84.2%
删边i-j
邻接矩阵:
有向图:map[i][j] = 0;
无向图:map[i][j] = map[j][i] = 0;
邻接表:
有向图:
p = v[i] -> firstedge;
pre = p;
while (p && p -> data != j)
{pre = p;p = p -> next;}
if (p && pre == p) v[i] -> firstedge = p -> next;
else if (p) pre -> next = p -> next;
无向图:
p = v[i] -> firstedge;
pre = p;
while (p && p -> data != j)
{pre = p;p = p -> next;}
if (p && pre == p) v[i] -> firstedge = p -> next;
else if (p) pre -> next = p -> next;
p = v[j] -> firstedge;
pre = p;
while (p && p -> data != i)
{pre = p;p = p -> next;}
if (p && pre == p) v[j] -> firstedge = p -> next;
else if (p) pre -> next = p -> next;
用邻接表表示的图进行广度优先遍历时,通常是采用()来实现算法的.
用邻接表表示的图进行广度优先遍历时,通常是采用()来实现算法的.
A 栈 B队列 C图 D树
shensj1年前1
junzilan_ly 共回答了22个问题 | 采纳率77.3%
B,广搜都是队列
邻接表是链表
求java大神!下面是一个用java表示图的程序(邻接表表示法);在运行的时候提示NullPointerExceptio
求java大神!下面是一个用java表示图的程序(邻接表表示法);在运行的时候提示NullPointerException.
程序如下
package graph;
class Link
{
public int idata;
public double ddata;
public Link next;
//.
public Link(int id,double dd)
{
idata=id;
ddata=dd;
}
//.
public void displayLink()
{
System.out.println("{"+idata+","+ddata+"}");
}
}// end class Edge
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class graphHead
{
//int j;
Link first;
//.
public graphHead()
{
first=null;
}
//.
public boolean isEmpty()
{
return(first==null);
}
//.
public void insertFirst(int id,double dd)
{
Link newLink=new Link(id,dd);
newLink.next=first;
first=newLink;
}
}// end class graphHead
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public class isGraph {
public static final int N = 10;//ps:this number should be told at first
public graphHead[] ADTGraph=new graphHead[N];
//.
public void addEdge(int from,int to)
{
ADTGraph[from-1].insertFirst(to,0.0);
ADTGraph[to-1].insertFirst(from,0.0);
}
//.
public void displayGraph()
{
int i;
for(i=0;i
afazhou1年前1
PEIBEI 共回答了13个问题 | 采纳率100%
graphHead[] ADTGraph=new graphHead[N];
可是你数组里面 每一个graphHead都没有初始化!每一个graphHead[i]=new graphHead();
已知有向图的邻接表存储结构如下图所示
已知有向图的邻接表存储结构如下图所示

(1)根据有向图的深度优先遍历算法,从顶点v1出发,所得到的顶点序列是(C).
A. v1,v2,v3,v5,v4 B. v1,v2,v3,v4,v5
C. v1,v3,v4,v5,v2 D. v1,v4,v3,v5,v2
(2)根据有向图的宽度优先遍历算法,从顶点v1出发,所得到的顶点序列是(B)
A. v1,v2,v3,v4,v5 B.v1,v3,v2,v4,v5
C. v1,v2,v3,v5,v4 D. v1,v4,v3,v5,v2
yangyi12011年前1
西兰花2 共回答了22个问题 | 采纳率95.5%
深度优先是从某个顶点出发,访问完后,寻找一个未访问的邻接顶点继续深度优先,如果此路不同就往回退,所以看邻接表,首先访问V1,完了后顺链寻找没有访问的邻接顶点,自然链表中的第一个结点就是v3,接着转到v3再来深度优先,访问v3后,在其链表中第一个邻接顶点是v4
接着访问v4,下面走不通,回到v3,继续顺链往后,自然是v5,v5的邻接顶点中v2还没有访问
所以序列为v1, v3, v4, v5, v2
再看广度优先,从某个顶点完成后,需要一口气将其邻接未访问的所有顶点都访问,后面类推
于是过程是先v1,再顺链将v3,v2依次访问完,然后再依次访问v3和v2的各个未访问邻接顶点,v3链表中顺链可以访问v4,v5,所以最后访问序列为v1, v3, v2, v4, v5
写出邻接矩阵和邻接表
写出邻接矩阵和邻接表

yh8311051年前1
donghai521 共回答了15个问题 | 采纳率86.7%
邻接矩阵:
0 0 1 1 0
0 0 0 1 1
1 0 0 0 1
1 1 0 0 0
0 1 1 0 0
邻接表:
A:C->D
B:D->E
C:A->E
D:A->B
E:B->C
数据结构中试基于图的深度优先搜索策略编写一程序,判别以邻接表方式存储的有向图中是否存在有顶点Vi到Vj
数据结构中试基于图的深度优先搜索策略编写一程序,判别以邻接表方式存储的有向图中是否存在有顶点Vi到Vj
顶点的路径,其中i不等于j,是写一个程序
waiter_wt1年前1
2Glove 共回答了18个问题 | 采纳率83.3%
作业不回答,仅仅修改你的程序.
谁会数据结构?用邻接表创建一个 < 无向图>,中间涉及到“狐头”“狐尾”吗?我个人认为不应该涉及到>
谁会数据结构?用邻接表创建一个 < 无向图>,中间涉及到“狐头”“狐尾”吗?我个人认为不应该涉及到>
void CreateGraph(AdjGraph *G)
/*采用邻接表存储结构,创建无向图G*/ 、-----------《它注明是创建无向图》
{
x05int i,j,k;
x05VertexType v1,v2;x05x05
.(中间省略)
x05scanf("%s%s",v1,v2);
x05x05i=LocateVertex(*G,v1);
x05x05j=LocateVertex(*G,v2);
x05x05/*j为弧头i为弧尾创建邻接表*/----------中间为什么涉及弧头弧尾?
x05x05p=(ArcNode*)malloc(sizeof(ArcNode));
x05x05p->adjvex=j;
x05x05p->info=NULL;
x05x05p->nextarc=G->vertex[i].firstarc;
x05x05G->vertex[i].firstarc=p;
x05x05/*i为弧头j为弧尾创建邻接表*/------中间问什么涉及弧头弧尾?
kiya00701年前1
一六电子 共回答了16个问题 | 采纳率75%
用邻接表创建一个 < 无向图>,是不会涉及到弧头弧尾的,只有边邻接的两个顶点
设计一个算法,求无向图G(采用邻接表存储)的连通分量的个数
设计一个算法,求无向图G(采用邻接表存储)的连通分量的个数
设计一个算法,求无向图G(采用邻接表存储)的连通分量的个数
试计算n个结点的m叉树转化为二叉树所需的存储资源比未转化前用定长节点存储节省了多少?
znjkkk1年前1
苕窝窝 共回答了14个问题 | 采纳率100%
int Count(Graph G)
{
int count=0;
for(v=0;v
画出图的邻接矩阵和邻接表
jhzpe1年前1
wenfeiliu 共回答了18个问题 | 采纳率100%
邻接矩阵:
0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0
邻接表:
1->2->3->4
2->1->3->5
3->1->2->4->5
4->1->3->5
5->2->3->4
数据结构中,矩阵压缩里什么叫行逻辑邻接表?
奇可1年前1
hssshl 共回答了19个问题 | 采纳率84.2%
相对于三元组顺序表来讲,增加了一个行逻辑链接的向量(数组)用来指示各行第一个非零元的位置
邻接矩阵、邻接表表示图时的深度优先序列、广度优先序列
邻接矩阵、邻接表表示图时的深度优先序列、广度优先序列
已知一个图的顶点集V各边集G如下:
V = {0,1,2,3,4,5,6,7,8,9};
E = {(0,1),(0,4),(1,2),(1,7),(2,8),(3,4),(3 ,8),(5,6),(5,8),(5,9),(6,7),(7,8),(8,9)}
当它用邻接矩阵表示和邻接表表示时,分别写出从顶点V0出发按深度优先搜索遍历得到的顶点序列和按广度优先搜索遍历等到的顶点序列.
假定每个顶点邻接表中的结点是按顶点序号从大到小的次序链接的.
图 深度优先序列 广度优先序列
邻接矩阵表示时
邻接表表示时
jshalht1年前1
continuealex 共回答了12个问题 | 采纳率100%
#include
#include
#include
#include
#define maxsize 64
#define TRUE 1
#define FALSE 0
#define n 10
#define e 13
typedef char datatype ;
typedef char vextype;
typedef int adjtype;
typedef struct
{
vextype vexs[maxsize];
adjtype arcs[maxsize][maxsize];
}graph;
typedef struct
{
datatype data[maxsize];
int front,rear;
}sequeue;
typedef struct node
{
int adjvex;
struct node *next;
}edgenode;
typedef struct
{
vextype vertex;
edgenode *link;
}vexnode;
vexnode gl[maxsize];
graph *ga;
sequeue *Q;
graph *CREATGRAPH()
{
int i,j,k;
char ch;
system("cls");
scanf("%c",&ch);
printf("n请输入顶点信息(邻接矩阵):");
for(i=1;ivexs[i]);
for(i=1;iarcs[j][i]=1;
}
return ga;
}
void PRINT()
{
int i,j;
system("cls");
printf("n对应的邻接矩阵是:nn");
for(i=1;iadjvex=i;
s->next=gl[j].link;
gl[j].link=s;
}
}
void PRINTL()
{
int i;
edgenode *s;
system("cls");
printf("n对应的邻接表是:n");
for(i=1;iadjvex);
s=s->next;
}
printf("n");
}
}
sequeue *SETNULL(sequeue *P)
{
P->front=maxsize-1;
P->rear=maxsize-1;
return P;
}
int EMPTY(sequeue *Q)
{
if(Q->rear==Q->front)
return TRUE;
else
return FALSE;
}
sequeue *ENQUEUE(sequeue *Q,int k)
{
if(Q->front==(Q->rear+1)%maxsize)
{
printf("队列已满!n");
return NULL;
}
else
{
Q->rear=(Q->rear+1)%maxsize;
Q->data[Q->rear]=k;
}
return Q;
}
int DEQUEUE(sequeue *Q)
{
if(EMPTY(Q))
{
printf("队列为空,无法出队!n");
return FALSE;
}
else
{
Q->front=(Q->front+1)%maxsize;
return Q->data[Q->front];
}
return 1;
}
void BFS(int k)
{
int i,j;
int visited[maxsize]={0};
printf("n广度优先遍历后得到的序列是:");
Q=SETNULL(Q);
printf("%3c",ga->vexs[k]);
visited[k]=TRUE;
Q=ENQUEUE(Q,k);
while(!EMPTY(Q))
{
i=DEQUEUE(Q);
for(j=1;jarcs[i][j]==1)&&(!visited[j]))
{
printf("%3c",ga->vexs[j]);
visited[j]=TRUE;
Q=ENQUEUE(Q,j);
}
}
printf("nn深度优先遍历后得到的序列是:");
}
void BFSL(int k)
{
int i;
int visited[maxsize]={0};
edgenode *p;
Q=SETNULL(Q);
printf("n广度优先遍历后得到的序列是:");
printf("%3c",gl[k].vertex);
visited[k]=TRUE;
Q=ENQUEUE(Q,k);
while(!EMPTY(Q))
{
i=DEQUEUE(Q);
p=gl[i].link;
while(p!=NULL)
{
if(!visited[p->adjvex])
{
printf("%3c",gl[p->adjvex].vertex);
visited[p->adjvex]=TRUE;
Q=ENQUEUE(Q,p->adjvex);
}
p=p->next;
}
}
printf("nn深度优先遍历后得到的序列是:");
}
void DFS(int i)
{
int j;
static int visited[maxsize]={0};
printf("%3c",ga->vexs[i]);
visited[i]=TRUE;
for(j=1;jarcs[i][j]==1)&&(!visited[j]))
DFS (j);
}
void DFSL(int k)
{
int j;
edgenode *p;
static int visited[maxsize]={0};
printf("%3c",gl[k].vertex);
visited[k]=TRUE;
p=gl[k].link;
while(p)
{
j=p->adjvex;
if(!visited[j])
DFSL(j);
p=p->next;
}
}
void main()
{
int i,k;
int ch;
Q=malloc(sizeof(graph));
ga=malloc(sizeof(graph));
while(1)
{
printf("nnn");
printf("输入你的选择:");
scanf("%d",&ch);
switch(ch)
{
case 1:CREATADJLIST();
PRINTL();
printf("想从第几号结点开始:");
scanf("%d",&k);
BFSL(k);
DFSL(k);break;
case 2:ga=CREATGRAPH();
PRINT();
printf("想从第几号结点开始:");
scanf("%d",&i);
BFS(i);
DFS(i);break;
case 3:exit (0);
}
}
}
数据结构题.假定无向图G有6个结点和9条边,.(1) 画出G的邻接距阵和邻接表(2) 根据邻接表从顶点3
数据结构题.假定无向图G有6个结点和9条边,.(1) 画出G的邻接距阵和邻接表(2) 根据邻接表从顶点3
假定无向图G有6个结点和9条边,并依次输入这9条边为(0,1)(0,2)(0,4)(0,5)(1,2)(2,3)(2,4)(3,4)(4,5) (1) 画出G的邻接距阵和邻接表.(2) 根据你的邻接表从顶点3出发,分别写出按深度优先搜索法和广度优先搜索法进行遍历的结点序列.
wangzia_0121年前0
共回答了个问题 | 采纳率
图的邻接表怎么画
尼小姑1年前1
quanquan7 共回答了17个问题 | 采纳率94.1%
先给A、B、C、D、E按顺序编码1、2、3、4、5.随便找个起点,以A作为起点,A和B、C、E直接相连,则1(A)->2(B)->3(C)->5(E)结尾符;然后B是和A、D直接相连,则2(B)->1(A)->4(D)结尾符号;C直接和A、D、E相连,然后就直接一个个箭头对应着A、D、E对应的数字,把所有字母数一遍就可以了,说的很详细吧
设连通无向图G采用邻接表表示.写出求最小生成树Prim算法的实现代码.
设连通无向图G采用邻接表表示.写出求最小生成树Prim算法的实现代码.
来个具体的例子看看,坐等,来人啊.
maoshaxu1年前1
沸了 共回答了22个问题 | 采纳率86.4%
百度一下很多的
假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点vi相关的所有弧的时间复杂度是_____
假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点vi相关的所有弧的时间复杂度是_____
为什么是o(n+e)?
风继续吹1681年前1
widexpress 共回答了15个问题 | 采纳率100%
因为要找到所有以这个顶点为终点的弧,必须将整个邻接表找完才行,这个不是逆邻接表,每个顶点的边表只管出不管入
在图采用邻接表存储时,求最小生成树的 Prim 算法的时间复杂度为?
在图采用邻接表存储时,求最小生成树的 Prim 算法的时间复杂度为?
在图采用邻接表存储时,求最小生成树的 Prim 算法的时间复杂度为( ).
A. O(n) B. O(n+e) C. O(n2) D. O(n3)
给的答案是B.但是我看书上应该是C啊.求大神指教、、
大青柿子1年前1
海英_qq 共回答了19个问题 | 采纳率84.2%
邻接表储存时,是B.邻接矩阵储存就是C了.
(急)试写出程序判别以邻接表方式存储的有向图G中是否存在由顶点vi到顶点vj的路径(i≠j).
(急)试写出程序判别以邻接表方式存储的有向图G中是否存在由顶点vi到顶点vj的路径(i≠j).
算法如下:
int visited[MAXSIZE]; //指示顶点是否在当前路径上
int exist_path_DFS(ALGraph G,int i,int j)//深度优先判断有向图G中顶点i到顶点j是否有路径,是则返回1,否则返回0
{
if(i==j) return 1; //i就是j
else
{
visited[i]=1;
for(p=G.vertices[i].firstarc;p;p=p->nextarc)
{
k=p->adjvex;
if(!visited[k]&&exist_path(k,j)) return 1;//i下游的顶点到j有路径
}//for
}//else
}//exist_path_DFS
void find(int A[][],int m,int n)//求矩阵A中的马鞍点
{
int i,j,min,flag;
for(i=0;inext;
}
else
{
r->next=q;
r=r->next;
q=q->next;
}
}
r->next=(p!=NULL?p:q);
free(B);
}
alin10241年前1
linzhixiao 共回答了22个问题 | 采纳率95.5%
tyrt6uyiuyjkhjkyuujhkuftywemcnwqwnhecvsyhgynsvsehvysdnfxdnvhbmndhnfdhuuvbvhdfbvhjbvn dfjbgvhadlfbgkjazsnzjd1fn4ghmj68d1fm4f2h4gj4m981xd4m194g9h16gv54h56g4mh141jk87gj1,8+05x684e684mnszwe5918 a687h2uh61li81,7u8j9fg741n987es9gv7498q71gv98w
2、设某个图的邻接表如图2,根据该临界表执行从顶点A出发的广度优先搜索算法,则经历的
2、设某个图的邻接表如图2,根据该临界表执行从顶点A出发的广度优先搜索算法,则经历的
2、设某个图的邻接表如图2,根据该临界表执行从顶点A出发的广度优先搜索算法,则经历的结点顺序为( B )
(A)ABCDE
(B)AEDBC
(C)ABCED
(D)ACBDE
清真寺的圣歌1年前1
天使的眼泪jojo 共回答了19个问题 | 采纳率84.2%
从A出发,A的邻接点有5、4、2,即E、D、B,依次遍历并加上遍历标记;
再从E出发,E的邻接点有2,即B,已经遍历过;
再从D出发,D的邻接点有3,即C,遍历C并加上遍历标记;
此时所有节点都已经遍历过:A E D B C
数据结构:无向图适合邻接矩阵,有向图适合邻接表
数据结构:无向图适合邻接矩阵,有向图适合邻接表
这句话对吗,并给出理由
yagnjv1年前1
janhua000 共回答了15个问题 | 采纳率93.3%
这句话不对,邻接表和邻接矩阵,即可以存储无向图也可以存储有向图,稠密图适合用邻接矩阵,稀疏图适合用邻接表存储
是设计一个算法:对一个以邻接表表示的含有n个顶点e条弧的有向图G,求解其每个顶点的度
活在安达信的日子1年前1
巧克力馅饼来了 共回答了25个问题 | 采纳率88%
结构严谨,内容充实,我会做!~