图
凌空的桨
https://github.com/marsmarcin/
展开
-
图1——用邻接矩阵表示法创建有向图
图可分两部分:一个是创建顶点信息,可用一个一维数组存储;另一个是创建弧的信息,包括弧的相关顶点和权值,可存储到二维数组里,其中,二维数组的下标分别表示两个顶点的弧尾和弧头编号,权值存放在对应的数组中。创建一个网:请输入有向网N的顶点数和弧数:6 9请输入6个顶点的值:a b c d e f请分别输入9条弧的弧尾 弧头 权值(以空格分隔):a b 6a e 5a f 9f c 7...原创 2019-04-05 15:57:40 · 11513 阅读 · 0 评论 -
图10——判断顶点u和顶点v是否存在简单路径
已有邻接表表示的有向图,编程判断从顶点u到顶点v是否存在简单路径若有,则打印出该路径上的顶点。要求先描述图中的存储结构,并简述算法思路;查找邻接顶点等图运算要自己实现(尽量采用非递归算法)【分析】这是浙江大学考研试题。主要考查图的广度优先遍历。通过从顶点u开始对图进行广度优先遍历,如果访问到顶点v,则说明从顶点u到顶点v存在一条路径。因为在图的遍历过程中,要求每个顶点只能访问一次,所以该路径...原创 2019-06-28 22:43:21 · 4910 阅读 · 2 评论 -
图9——求距离顶点v0的最短长度为k的所有顶点
设计算法求出无向连通区图中距离顶点v0的最短路径长度(最短路径长度以边数为单位计算)为K的所有顶点,要求尽可能的节省时间。【分析】这是西北大学考研试题。本题应用广度优先遍历求解,若以v0作为生成树的根为第1层,则距离顶点v0最短路径长度为K的顶点均在第K+1层。可用队列存放顶点,将遍历访问顶点的操作改为入队操作。队列中设头尾指针分别为f和r,用level表示层数。主要考查图的遍历。可以采...原创 2019-06-26 21:48:16 · 4896 阅读 · 0 评论 -
图8——判断有向图中是否有根
在有向图G中,如果r到G中每个结点都有路径可达,则称结点r为G的跟结点。编写一个算法判断有向图G中是否有根,如果有则打印出所有根节点的值。【分析】这是东北大学和浙江大学的考研试题。主要考查对图的深度优先搜索的理解。若从某结点出发可比案例到所有其他顶点,则该结点为根结点,否则不是根节点。对每个顶点遍历一次即可完成任务。code:#include <stdlib.h>#i...原创 2019-06-23 21:46:35 · 6610 阅读 · 2 评论 -
图7——图的广度优先遍历
假设一个无向图按照邻接表存储,编写一个广度优先搜索遍历的算法。【分析】定义一个数组visited[],用来标记顶点是否被访问。初始时,标志数组初始化为0,表示顶点未被访问。为1时,表示顶点已被访问。第一个顶点v0出发,访问该顶点位置并置visited[v0]为1,然后将v0入队。若队列不为空,将队头元素(顶点)出队,依次访问该顶点的所有邻接点,同时将这些顶点标记为已访问,并将其邻接顶点依次入...原创 2019-06-23 10:57:07 · 332 阅读 · 0 评论 -
图3——把邻接矩阵转换为邻接表
【分析】这是哈工大的考研题。由于有向图和无向图的邻接存储结构不同,并与带权图的存储存在一定差别,这里给出有向图的邻接矩阵到邻接表的转换。#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>#include <iostream>...原创 2019-06-18 18:34:53 · 8485 阅读 · 0 评论 -
图6——深度遍历无向图
设计一个递归算法,采用深度优先搜索对无向图进行遍历,并对算法中的无向图的存储结构予以简单的说明。这是大连理工考研试题。在深度优先的遍历过程中,图中可能存在回路,因此,在访问了某个顶点后,沿着某条路径遍历,有可能又回到该顶点。例如,对于下图中的无向图G在访问了顶点a之后,接着访问顶点b、e、h、i、f、j、d。因为d的邻接顶点是a,沿着<d,a>会再次访问顶点a。为了避免再次...原创 2019-06-22 21:18:29 · 1758 阅读 · 0 评论 -
图5——判断有向图中是否存在回路
假设以邻接矩阵作为图的结构,编写算法,判别在给定的有向图中是否存在一个简单的有向回路,若存在,则以顶点序列的方式输出该回路(找到一条即可)(注意:图中不存在顶点到自身的弧)这是清华大学的考研试题。为了判断有向图是否存在环,可以通过深度优先搜索的方法来实现。从编号0的顶点出发,若两个顶点间存在路径,则记录下源顶点标记为已访问(标记为-1)。在遍历的过程中,若有顶点与源顶点相同,则说明存在环。...原创 2019-06-22 09:32:13 · 23486 阅读 · 5 评论 -
图4——图的遍历(基本概念)
1.图的深度遍历图的深度优先遍历与树的深度优先遍历类似,是树的先根遍历的推广。图的深度优先遍历的思想是:从图中某个顶点v0出发,访问顶点v0的第一个邻接点,然后以该邻接点为新的顶点,访问该顶点的邻接点。重复执行以上操作,直到当前顶点没有邻接点为止。返回到上一个已经访问过且还有未被访问的邻接点的顶点,按照以上步骤继续访问该顶点的其他未被访问的邻接点。依此类推,直到图中所有的顶点都被访问过。图的...原创 2019-06-19 23:04:01 · 419 阅读 · 0 评论 -
图2——利用邻接表创建有向图
图2——利用邻接表创建有向图图假设以邻接表作为图的存储结构,编写算法,创建有向图并输出邻接表。主要考查对邻接表的理解。图的邻接表分为两个部分:表头结点和边表结点,因此创建有向图也分成两部分:一是创建表头结点,二是创建边表结点构成的边表。创建表头结点就是根据输入的结点信息,将结点信息直接存入对应的数据域中,并且将该结点的指针域置为NULL。for(int i=0;i<G-...原创 2019-04-05 19:42:58 · 15252 阅读 · 1 评论 -
图11——判断图中是否为一棵树
编写算法,判断一个无向图是否是一颗树。【分析】一个无向图G是一棵树的条件为:G必须是无回路的连通图或n-1条边的连通图,这里我们采用后者作为判断条件。例如下图所示:上面的无向图就是一棵树,它有6个顶点,5条边。code:#include<stdlib.h>#include<stdio.h>#include<malloc.h>#inc...原创 2019-06-29 20:46:30 · 4848 阅读 · 1 评论