算法导论 第22章 22.1-3

算法导论第三版 22.2 广度优先搜索 练习题答案全解析 1——2:略3. 使用单个位来表示颜色,单个位只能表示位0/1,因此颜色只有白和灰,黑色无法表示,因此删除第十八行对每个结点扫描结束后赋值为黑色的一行代码。证明:直接一想就可以,代码第十三行,v.color==WHITE才会进行处理,灰色同样不处理,而算法最后之所以设置为黑色,是为了在研究算法的过程中给出一个更加形象的说明而已。 4. 如果换成邻接矩阵的话,BFS的时间复杂度将变为多少 如果换成邻... 阅读详情
#include<iostream>
using namespace std;
typedef struct Gnode
{
	int index;
	struct Gnode *next;
}Gnode;
int N,M;//N表示顶点,M表示边,有向图
int main()
{
	scanf("%d %d",&N,&M);
	int **area=new int*[N];
	int **area2=new int*[N];
	int i,j;
	for(i=0;i<N;i++)
	{
		area[i]=new int[N];
		area2[i]=new int[N];
	}
    for(i=0;i<N;i++)
		for(j=0;j<N;j++)
			area[i][j]=0;
	Gnode *G=new Gnode[N];
	Gnode *G2=new Gnode[N];
	for(i=0;i<N;i++)
	{
		G[i].index=i;
		G[i].next=NULL;
		G2[i].index=i;
		G2[i].next=NULL;
	}
	for(i=0;i<M;i++)
	{
		int a,b;
		scanf("%d %d",&a,&b);
		area[a][b]=1;
		Gnode *temp=&G[a];
		while(temp->next!=NULL)
			temp=temp->next;
		Gnode *temp2=new Gnode;
		temp2->index=b;
		temp2->next=NULL;
		temp->next=temp2;
	}
	printf("before transposition\n");
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
			printf("%d ",area[i][j]);
		printf("\n");
	}
	printf("\n");
	for(i=0;i<N;i++)
	{
		printf("%d",G[i].index);
		Gnode *temp=&G[i];
		while(temp->next!=NULL)
		{
			temp=temp->next;
			printf(" -> %d",temp->index);
		}
		printf(" -> ^\n");
	}
	printf("\nAfter transposition\n");
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
			area2[j][i]=area[i][j];
	for(i=0;i<N;i++)
	{
		int a=G[i].index;
		int b;
		Gnode *temp=&G[i];
		while(temp->next!=NULL)
		{
			temp=temp->next;
			b=temp->index;
			Gnode *temp2=new Gnode;
			temp2->index=a;
			Gnode *temp3=&G2[b];
			while(temp3->next!=NULL)
				temp3=temp3->next;
			temp3->next=temp2;
			temp2->next=NULL;
		}
	}
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			printf("%d ",area2[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	for(i=0;i<N;i++)
	{
		printf("%d",G2[i].index);
		Gnode *temp=&G2[i];
		while(temp->next!=NULL)
		{
			temp=temp->next;
			printf(" -> %d",temp->index);
		}
		printf(" -> ^\n");
	}
	return 0;
}

算法导论》第 22 - 基本的图算法 本文介绍了《算法导论》第22的基本图算法,包括图的表示方法(邻接表和邻接矩阵)、广度优先搜索(BFS)和深度优先搜索(DFS)的算法实现与应用,以及拓扑排序和强连通分量(SCC)算法。通过C++代码示例展示了迷宫求解、迷宫生成、课程安排和社交网络分析等实际应用场景,并比较了不同算法的时间复杂度。文还包含思考题和算法流程图,帮助读者深入理解图算法的核心概念和应用价值。 阅读详情

相关推荐

算法导论22 图算法 22.2 广度优先搜索

一、综述 BFS蛮简单的,没什么好的综述的。 BFS算法的算法过程与它是有向图还是无向图没有关系,也与用邻接图还是用矩阵表示也没有关系。本文的代码是用邻接图实现的,例子是22-3的有向图。 用邻接矩阵实现的BFS 见算法导论-22.2-3-邻接矩阵实现图的广度优先搜索 二、代码 1.Link_Graph.h #include #include using namespace

幸福在路上 6572

算法导论22课后习题答案

最近在研习算法导论,发现课后习题的精彩程度甚至不亚于正文,对于算法导论的爱好者而言,这是一份不错的参考资料

算法导论习题解-22基本的图算法

总结 深度优先搜索 按照访问顺序,每个顶点标记两个序号,首次访问时的次序,以及探索完该顶点所有分支时的次序。边可以分成四种:树边,前向边,后向边(回边),横向边。(图片来自 算法概论 by dasgupta) 有向无环图和拓扑排序 有向图有环当且仅当DFS过程中遇到回边。 有向无环图中每一条边都指向一个finish值更小的顶点。 对于DFS,无环性、可线性化、无回边三者是等价的。 ...

groovy2007的专栏 8339

算法导论第二十二习题解答

能用代码表示的都用代码表示,不能表示的写出思路,思路都没写的就是我也做不出来

算法导论22 基本的图算法 22.1 图的表示 习题解答

这是因为对于每个节点v,对其邻接链表中的每个邻接节点u,以及u的邻接链表中的每个节点w,都会执行一次操作,总的时间复杂度是边数和节点数的乘积。对于邻接链表表示的有向图,计算每个节点的出度需要遍历图中的每个节点,然后对于每个节点,遍历其邻接链表,统计邻接节点的数量即为该节点的出度。因此,出度的计算时间复杂度为O(V + E),其中V是节点的数量,E是边的数量。对于有向图的入度,需要对图中的每个节点进行遍历,然后再对每个节点的邻接链表进行遍历,统计指向该节点的边的数量即为该节点的入度。

CrystalLuo0827的博客 857

算法导论22.3-1

问题描述 画出一个3*3的网格,行列的抬头分别标记为白色、灰色和黑色。对于每个表格单元(i,j),请指出在对有向图进行深度优先搜索的过程中,是否可能存在一条边,连接一个颜色为i的结点和一个颜色为j的结点。对于每种可能的边,指明该种边的类型。另外,请针对无向图的深度优先搜索在制作一张这样的网格。 问题求解 深度优先搜索可以对输入图的边进行分类: 树边:在深度优先森林GπG_\pi中的边。 后向

MyLinChi的博客 1021

算法导论22部分答案

参考https://blog.csdn.net/github_35807147/article/details/79110801 22.1-1 给定有向图的邻接链表,需要多长时间才能计算出每个结点的出度(发出的边的条数)?给定时间才能计算出每个节点的入度(进入的边的条数)? 一个图G(V,E),(V为点数,E为边数),邻接链表空间为O(V+E)。 而邻接表要遍历,因此计算每个节点的出度和入...

qq_43235540的博客 3352

欧拉回路问题(算法导论22.2-8 和22-3)

22.3 欧拉回路的算法来自1873年的Hierholzer,前提是假设图G存在欧拉回路,即有向图任意点的出度和入度相同。从任意一个起始点v开始遍历,直到再次到达点v,即寻找一个环,这会保证一定可以到达点v,因为遍历到任意一个点u,由于其出度和入度相同,故u一定存在一条出边,所以一定可以到达v。将此环定义为C,如果环C中存在某个点x,其有出边不在环中,则继续以此点x开始遍历寻找环C’,将环C、C’

白水白水的专栏 9874

算法导论22基本的图算法 思考题总结 (转载)

22-1 (以广度优先搜索来对图的边进行分类)深度优先搜索将图中的边分类为树边、后向边、前向边和横向边。广度优先搜索也可以用来进行这种分类。具体来说,广度优先搜索将从源结点可以到达的边划分为同样的4种类型。 a.证明在对无向图进行的广度优先搜索中,下面的性质成立: 1.不存在后向边,也不存在前向边。 2.对于每条树边(u, v),我们有v.d = u.d + 13.对于每条横向边(u,...

weixin_30878501的博客 1147

算法导论22 图算法 22.3 深度优先搜索

一、综述  深搜策略:在深搜过程中,对于最新发现的顶点,如果它还有以此为起点的而未探测到的边,就沿此边继续探测下去。当顶点v的所有边都已被探测过后,搜索将回溯到发现顶点v有起始点的那些边。 时间戳:当顶点v第一次被发现时记录下第一个时间戳d[v],当结束检查v的邻接表时,记录下第二个时间戳f[v]。v在d[v]时刻前是白色的,在时刻d[v]和f[v]之间是灰色的,在时刻f[v]之后是黑

幸福在路上 8122

算法导论第三版习题及答案

正在看算法导论第三版,记录自己做的一些习题及答案。

u013668671的博客 1万+

算法导论 Exercises 22.5

Exercises 22.5  (22.5-1, 22.5-2, 22.5-3, 22.5-4, 22.5-5, 22.5-6, 22.5-7) - 算法导论.英文第3版  最近看书的同时, 感觉某些练习缺少参考, 所以按部分总结了自己的解答, 也能够强化学习过程.  如有不足或疑问, 欢迎指正.  Exercises 22.5-1 How can the nu

游戏开发 5900

算法导论22基本的图算法 思考题总结

22-1 (以广度优先搜索来对图的边进行分类)深度优先搜索将图中的边分类为树边、后向边、前向边和横向边。广度优先搜索也可以用来进行这种分类。具体来说,广度优先搜索将从源结点可以到达的边划分为同样的4种类型。 a.证明在对无向图进行的广度优先搜索中,下面的性质成立: 1.不存在后向边,也不存在前向边。 2.对于每条树边(u, v),我们有v.d = u.d + 13.对于每条横向边(u,

chan15的博客 3187

算法导论》第三版第13 红黑树 练习&思考题 个人答案

13.1 红黑树的性质 13.1-1 解: 完全二叉搜索树: 黑高为2的红黑树: 黑高为3的红黑树: 黑高为4的红黑树: 13.1-2 解:如果标红,不满足性质4,因为35是36的父结点,也是红色;如果标黑,不满足性质5,该条路径黑高超过其他路径。 13.1-3 解:可以验证所得到的树仍然满足5个条件,所以是红黑树。 13.1-4 解: (1)如果“吸收”前两个子结点都已经是黑色了,度为2...

张劲声的博客 5697

算法导论22:基本的图算法

目录 图的表示 特殊的图 图的遍历 拓扑排序(Topological Sort) 强连通分量(Strongly Connected Components) 欧拉回路(Eulerian Circuit) 题选 图的表示 1.邻接矩阵(Adjacency Matrix) 2.邻接链表(Adjacency List) 3.完善邻接链表(Implementing Adjacency...

Salmon_lee的博客 2069

算法导论 第二十二:图的搜索

图有两种标准的表示方法,即邻接矩阵和邻接表(通常邻接矩阵用于稠密图,邻接表用于稀疏图)。如下: 对于图的搜索有两种方法:深度优先搜索 & 广度优先搜索。 广度优先搜索(Breadth-first search)      广度优先搜索是将已发现和未发现顶点之间的边界沿其广度方向向外扩展。亦即算法首先会发现和s距离为k的所有点,然后才会发现和s距离为k+1的其他顶点。 伪代码:

dllTimes 1052

算法导论习题分析—— 22 基本的图算法

算法导论习题分析—— 22 基本的图算法22-2 衔接点、桥和双连通分量abcdefgh代码实现 22-2 衔接点、桥和双连通分量 a 假如根节点在深度优先树中有两个子节点,则其中一个子节点必无法由其他节点搜索得到(否则就不是根节点的子节点了)。因此这个子节点只跟根节点相连,因此根节点是衔接点。 b 当一个节点vvv存在一个子节点,且该子节点与其后代节点不存在指向vvv的真祖先的后向边,则在深度...

weixin_42078418的博客 915

算法导论》笔记 第22 22.3 深度优先搜索

【笔记】 【练习】

Azarath Metrion Zinthos 1668
下一篇: 算法导论 第22章 22.1-4
AndrewThompson
博客等级 码龄11年 13粉丝 383原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值