统考计算机2010年版,2010年计算机专业统考试题数据结构

本文探讨了图的定义、存储结构(邻接矩阵和邻接表)、深度优先和广度优先遍历,包括求连通分量、最小生成树、拓扑排序、关键路径及最短路径算法。重点介绍了Prim算法、Kruskal算法、Dijkstra算法和Floyd算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《2010年计算机专业统考试题数据结构》由会员分享,可在线阅读,更多相关《2010年计算机专业统考试题数据结构(23页珍藏版)》请在人人文库网上搜索。

1、第七章,图,基本内容,图的定义、概念、术语及基本操作 图的存储结构,特别是邻接矩阵和邻接表 图的深度优先和广度优先遍历 图的应用(连通分量、最小生成树、拓扑排序、关键路径、最短路径),基本内容,图的遍历: 深度优先和广度优先遍历 在连通图中,主函数一次调用深度(广度)优先遍历过程,可遍历全部顶点,可以用此方法求连通分量的个数,能够画出遍历中形成的深度(广度)优先生成树或生成森林。,深度优先遍历,int visitedmax; for(i=1;iadjvex=0) dfs(G, p-adjvex); p=p-nextarc; ,广度优先遍历,int visitedmax, queuemax; v。

2、oid bfs(Adjlist G, int v) int front=0,rear=0,v1; struct edgenode *p; for(i=1;iadjvex=0) vistitedp-adjvex=1; printf( ); queuerear=p-adjvex; rear+; p=p-nextarc; ,深度优先遍历非递归,void dfs(Adjlist G, int v) struct Arcnode *stack, *p; int visitedmax, top=0; for(i=1;i0|p!=NULL) while(p!=NULL) if(visitedp-adjvex。

3、!=0) p=p-nextarc; else visitedp-adjvex=1; printf(“%d”, p-adjvex); top+; stacktop=p; p=Gp-adjvex.firstarc; if(top0)top-; p=stacktop; p=p-nextarc; ,最小生成树,最小代价生成树 连通图的最小生成树通常不是唯一的,但最小生成树边上的权值之和是唯一的,掌握Prim算法和Kruskal算法,能够手工分步模拟生成树的过程。,拓扑排序,拓扑排序是在有向图上对入度(先、后)为零的顶点的一种排序,通常结果不唯一。 用拓扑排序和深度优先遍历都可以判断图是否存在回路。 掌。

4、握手工模拟算法,关键路径,关键路径是在拓扑有序的前提下求出的从源点到汇点的最长路径。 减少关键活动时间可以缩短工期,是指该活动为所有关键路径所共有,且减少到尚未改变关键路径的前提下才有效。 手工模拟算法过程。,最短路径,从单源点到其他顶点,以及各个顶点间的最短路径问题,掌握Dijkstra和Floyd算法,并能手工模拟,掌握用求最短路径来解决的应用问题。,1、输入有向图的顶点数,边数,顶点信息和边的信息建立邻接表 Status Build_AdjList(ALGraph ,2、在邻接表表示的有向图G上插入边(v,w) status Insert_Arc(ALGraph ,3、深度优先判断有向图。

5、G中顶点i到顶点j是否有路径,是则返回1,否则返回0 int visitedMAXSIZE; int exist_path_DFS(ALGraph G,int i,int j) if(i=j) return 1; else visitedi=1; for(p=G.verticesi.firstarc; p; p=p-nextarc) k=p-adjvex; if(!visitedk ,4、判断邻接表方式存储的有向图G的顶点i到j是否存在长度为k的简单路径 int visitedMAXSIZE; int exist_path_len(ALGraph G, int i, int j, int k)。

6、 if(i=j ,5、求有向图G中顶点u到v之间的所有简单路径,k表示当前路径长度 int pathMAXSIZE, visitedMAXSIZE; /*暂存遍历过程中的路径 int Find_All_Path(ALGraph G,int u,int v,int k) pathk=u; visitedu=1; if(u=v) printf(Found one path!n); for(i=0;pathi;i+) printf(%d,pathi); else for(p=G.verticesu.firstarc; p; p=p-nextarc) l=p-adjvex; if(!visitedl)。

7、 Find_All_Path(G,l,v,k+1); visitedu=0; pathk=0; ,6、求一个有向无环图中最长的路径 int maxlen, pathMAXSIZE; /*数组path用于存储当前路径 int mlpMAXSIZE; /*数组mlp用于存储已发现的最长路径 void Get_Longest_Path(ALGraph G) maxlen=0; FindIndegree(G,indegree); for(i=0;iadjvex); printf(%c,c); ,8、给定n个村庄之间的交通图,若村庄i和j之间有道路,则将顶点i和j用边连接,边上的Wij表示这条道路的长度。

8、,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的路程最短?试设计一个解答上述问题的算法。 分析: 每个顶点到其余各顶点的最短路径中最长的有n条,这n条中最短的一条。,9、设顶点a, b, c, d, e表示一个乡的5个村庄,弧上的权值表示为两村之间的距离; 求每个村庄到其它村庄的最短距离; 乡内要建立一所医院,问医院设在哪个村庄才能使各村离医院的距离较近。 分析:每个顶点到其余各顶点最短路径之和最短的一个。,10、欲用四种颜色对地图上的国家涂色,有相邻边界的国家不能用同一种颜色(点相交不算相邻)。 (1)试用一种数据结构表示地图上各国相邻的。

9、关系。 (2)描述涂色过程的算法。(不要求证明)。 分析:地图涂色问题可以用“四染色”定理.将地图上的国家编号(1n)从编号1开始逐一涂色,对每个区域用1色、2色、3色、4色依次试探,若当前所取颜色与周围已涂色区域不重色,则将该区域颜色入栈;否则,用下一颜色。若14色都与相邻某区域重色,则需出栈回溯,修改栈顶区域颜色。用邻接矩阵描述地图上国家间的关系,n个国家用n阶方阵表示,若第i个国家与第j个国家相邻,矩阵相应位置为1,否则为0。用栈记录染色结果,栈的下标值为区域号,元素值为色数。,void mapcolor(AdjMatrix C) int s; s1=1; i=2; j=1; while(i4) i-; j=si+1; /变更栈顶区域颜色。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值