首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
考研
设计一个算法,求无向图G(采用邻接表存储)的连通分量个数。
设计一个算法,求无向图G(采用邻接表存储)的连通分量个数。
admin
2013-07-12
71
问题
设计一个算法,求无向图G(采用邻接表存储)的连通分量个数。
选项
答案
解法一:采用深度优先遍历方法。算法如下: # define MAX_VERTEX NUM 20 //最大顶点数为20 typedef struct ArcNode{ //边表结点 int adjvex; //邻接点域 struct ArcNode*nextarc; //指向下一个邻接点的指针域 //若要表示边上信息,则应增加一个数据域info )ArcNode; tvpedef struct VNode{ //顶点表结点 VertexType data: //顶点域 ArcNode *firstarc; //边表头指针 }VNode,AdjList[MAX VERTEX—NUM]; //AdjList是邻接表类型 typedef struct{ AdjList adjlist; //邻接表 int veXnulTl.arcnum; //顶点数和边数 }ALGraph: //ALGraph是以邻接表方式存储的图类型 void DFS(ALGraph G,int V){ ArcNode*P: visitedrv]=1; //置已访问标记 prinf(“%d”,v); //输出被访问顶点的编号 p=G->adjlist[v].firstarc; //p指向顶点V的第一条边的终结点 while(P!=NULL){ if(visited[p一>adjvex]==0) //若P一>adjvex顶点未访问,递归访问它 DFS(G,P->adjvex); p=p->nextarc; //p指向顶点v的下一条边的终结点 } } int ConnNuml(ALGraph G){ //求图G的连通分量 int i,num=0; for(i=0;i
n;i++) visited[i]=0; for(i=0;i
n;i++) if(visited[i]==O){ DFS(G,i); //调用DFS算法 num++: } return(num); } 解法二:采用广度优先遍历方法。算法如下: void BFS(ALGraph G.int V){ ArcNode*P; int Qu[MAX VERTEX_NUM2,front=0,rear=0; //定义循环队列并初始化 int w,i; for(i:0;i
n;i++)visited[i]=0; //访问标志数组初始化 Drinf(“2%d”,v); //输出被访问顶点的编号 visitedrv]=1; //置已访问标记 rear=(rear+1)%MAX_VERTEX_NUM; QuErear]=v: //v入队 while(front!=rear){ //若队列不空时循环 front=(front+1)%MAX_VERTEX_NUM w=Qu[front]; //出队并赋予W P=G->adjlist[w].firstarc; //找与顶点W邻接的第一个顶点 while(p!=NULL){ if(visited[p->adjvex]==0){ //若当前邻接顶点未被访问 printf(”%2d”,P->adjvex); //访问相邻顶点 visited[p->adjvex]=1; //置该顶点已被访问的标志 rear=(rear+1)%MAX_VERTEX_NUM) //该顶点入队 Qu[rear]=P->adjvex; } P=P-nextarc; //找下一个邻接顶点 } ) printf(“\n”); int ConnNum2(ALGraph G){ //求图G的连通分量 int i,num=0; for(i=0:i
n;i++) visited[i]=0; for(i=0;i
n;i++) if(visited[i]==O){ BFS(G,i); //调用BFS算法 num++: return(num); }
解析
本题主要考查图的遍历的应用。对于无向图来说,深度优先遍历或者是广度优先遍历,若无向图是连通图,则一次遍历能够访问到图中的所有顶点,但若无向图是非连通图,则只能访问到初始点所在连通分量中的所有顶点,其他连通分量中的顶点是不可能访问到的。为此需要从其他每个连通分量中选择初始点,分别进行遍历,才能够访问到图中的所有顶点。因为在选择初始点的同时加上计数器,最后计数器的值即为连通分量个数。
转载请注明原文地址:https://jikaoti.com/ti/qVajFFFM
本试题收录于:
计算机408题库学硕统考专业分类
0
计算机408
学硕统考专业
相关试题推荐
西欧早期资产阶级反封建斗争以反天主教会的方式进行,主要原因是()①天主教会是最有势力的封建主集团②天主教会是封建的精神工具③天主教会日益腐败④近代自然科学的兴起
中国人民抗日战争胜利的基本经验和历史意义。
西汉时期,张骞第一次出使西域的主要目的是()
我国第一部系统的史学理论著作是()。
西汉初年,反驳刘邦“马上治天下”的说法,并向汉帝国治国献策的是()。
下列对于两次世界大战之间的国际关系体系的描述,正确的一组是()①原有的四大帝国纷纷解体②中欧和东南欧已经出现了许多民族独立国家③欧洲的两侧出现了崛起的美国和社会主义的苏维埃俄国④远东出现了恶性发展的日本和独立
简述当代科学技术革命兴起的背景、特点及影响。
最晚到汉武帝时期,出现了我国第一部算学著作(),它记载了用竿标测日影以求日高的方法,从而认识了勾股定理。
第一次国共合作采取了共产党员以个人身份加入国民党的“党内合作”方式,最早提出这种方式的是()
(1)页面长度为1KB=210B,因此页内偏移地址占10位。主存大小为16KB=214B,所以物理地址占14位。0AC5H=0000101011000101B,除去后10位,得到页号为2,则查找页表可知物理块号为4,所以物理地址是0100101100
随机试题
A.葡萄糖激酶B.6-磷酸果糖激酶1C.丙酮酸羧化酶D.柠檬酸合酶糖异生过程的关键酶是
用治湿阻气滞之脘腹胀闷,腹痛及咳喘多痰宜选()
A.增加胶囊剂的光泽B.调整胶囊剂的口感C.防止胶液在制备和贮存过程中发霉变质D.增加囊壳的韧性与可塑性E.增加美观,便于识别十二烷基磺酸钠在囊壳中的作用()。
A.心动过缓B.血钾降低C.血钾升高D.面部潮红E.下肢浮肿服用呋塞米可能引起
甲乙签订一服装加工合同,由乙负责为甲加工服装200套,面料南甲提供,双方并约定了面料的质量标准。甲分两批提供面料,但第二批面料经乙检验,与约定不符。为赶时间,乙自行从市场上购买面料进行加工,但在交货时甲拒绝收货。经反复协商,甲同意另行提供100套衣服的面料
在IMF成员国中,现在采用独立浮动汇率制度的国家个数最多。()
采用合同书形式订立合同的,在签字或者盖章之前,当事人一方已经履行主要义务,对方接受的,该合同()。
有关国有企业的监事会,下列说法中不正确的有()。
无痛胃镜一个最大的优点就是诊断准确率特别高。它具有影像质量好、屏幕画面大、图像清晰、分辨率高、弯曲角度大、操控灵活等优点。通过它,医生能够用肉眼直接观察到消化道的内部情况,能够发现诸如溃疡、肿瘤、息肉等病变,还能看清黏膜的充血、水肿以及色泽改变等细微变化,
有如下程序:#includeusingnamespacestd;classB{public:B(intxx):x(xx){++count;x+=10;)virtualvoids
最新回复
(
0
)