#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.2 广度优先搜索
一、综述 BFS蛮简单的,没什么好的综述的。 BFS算法的算法过程与它是有向图还是无向图没有关系,也与用邻接图还是用矩阵表示也没有关系。本文的代码是用邻接图实现的,例子是22-3的有向图。 用邻接矩阵实现的BFS 见算法导论-22.2-3-邻接矩阵实现图的广度优先搜索 二、代码 1.Link_Graph.h #include #include using namespace
算法导论22章课后习题答案
最近在研习算法导论,发现课后习题的精彩程度甚至不亚于正文,对于算法导论的爱好者而言,这是一份不错的参考资料
算法导论习题解-第22章基本的图算法
总结 深度优先搜索 按照访问顺序,每个顶点标记两个序号,首次访问时的次序,以及探索完该顶点所有分支时的次序。边可以分成四种:树边,前向边,后向边(回边),横向边。(图片来自 算法概论 by dasgupta) 有向无环图和拓扑排序 有向图有环当且仅当DFS过程中遇到回边。 有向无环图中每一条边都指向一个finish值更小的顶点。 对于DFS,无环性、可线性化、无回边三者是等价的。 ...
算法导论第二十二章习题解答
能用代码表示的都用代码表示,不能表示的写出思路,思路都没写的就是我也做不出来
算法导论 第22章 基本的图算法 22.1 图的表示 习题解答
这是因为对于每个节点v,对其邻接链表中的每个邻接节点u,以及u的邻接链表中的每个节点w,都会执行一次操作,总的时间复杂度是边数和节点数的乘积。对于邻接链表表示的有向图,计算每个节点的出度需要遍历图中的每个节点,然后对于每个节点,遍历其邻接链表,统计邻接节点的数量即为该节点的出度。因此,出度的计算时间复杂度为O(V + E),其中V是节点的数量,E是边的数量。对于有向图的入度,需要对图中的每个节点进行遍历,然后再对每个节点的邻接链表进行遍历,统计指向该节点的边的数量即为该节点的入度。
算法导论22.3-1
问题描述 画出一个3*3的网格,行列的抬头分别标记为白色、灰色和黑色。对于每个表格单元(i,j),请指出在对有向图进行深度优先搜索的过程中,是否可能存在一条边,连接一个颜色为i的结点和一个颜色为j的结点。对于每种可能的边,指明该种边的类型。另外,请针对无向图的深度优先搜索在制作一张这样的网格。 问题求解 深度优先搜索可以对输入图的边进行分类: 树边:在深度优先森林GπG_\pi中的边。 后向
算法导论第22章部分答案
参考https://blog.csdn.net/github_35807147/article/details/79110801 22.1-1 给定有向图的邻接链表,需要多长时间才能计算出每个结点的出度(发出的边的条数)?给定时间才能计算出每个节点的入度(进入的边的条数)? 一个图G(V,E),(V为点数,E为边数),邻接链表空间为O(V+E)。 而邻接表要遍历,因此计算每个节点的出度和入...
欧拉回路问题(算法导论22.2-8 和22-3)
22.3 欧拉回路的算法来自1873年的Hierholzer,前提是假设图G存在欧拉回路,即有向图任意点的出度和入度相同。从任意一个起始点v开始遍历,直到再次到达点v,即寻找一个环,这会保证一定可以到达点v,因为遍历到任意一个点u,由于其出度和入度相同,故u一定存在一条出边,所以一定可以到达v。将此环定义为C,如果环C中存在某个点x,其有出边不在环中,则继续以此点x开始遍历寻找环C’,将环C、C’
算法导论22章基本的图算法 思考题总结 (转载)
22-1 (以广度优先搜索来对图的边进行分类)深度优先搜索将图中的边分类为树边、后向边、前向边和横向边。广度优先搜索也可以用来进行这种分类。具体来说,广度优先搜索将从源结点可以到达的边划分为同样的4种类型。 a.证明在对无向图进行的广度优先搜索中,下面的性质成立: 1.不存在后向边,也不存在前向边。 2.对于每条树边(u, v),我们有v.d = u.d + 1。 3.对于每条横向边(u,...
算法导论 第22章 图算法 22.3 深度优先搜索
一、综述 深搜策略:在深搜过程中,对于最新发现的顶点,如果它还有以此为起点的而未探测到的边,就沿此边继续探测下去。当顶点v的所有边都已被探测过后,搜索将回溯到发现顶点v有起始点的那些边。 时间戳:当顶点v第一次被发现时记录下第一个时间戳d[v],当结束检查v的邻接表时,记录下第二个时间戳f[v]。v在d[v]时刻前是白色的,在时刻d[v]和f[v]之间是灰色的,在时刻f[v]之后是黑
算法导论第三版习题及答案
正在看算法导论第三版,记录自己做的一些习题及答案。
算法导论 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
算法导论22章基本的图算法 思考题总结
22-1 (以广度优先搜索来对图的边进行分类)深度优先搜索将图中的边分类为树边、后向边、前向边和横向边。广度优先搜索也可以用来进行这种分类。具体来说,广度优先搜索将从源结点可以到达的边划分为同样的4种类型。 a.证明在对无向图进行的广度优先搜索中,下面的性质成立: 1.不存在后向边,也不存在前向边。 2.对于每条树边(u, v),我们有v.d = u.d + 1。 3.对于每条横向边(u,
《算法导论》第三版第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...
算法导论第22章:基本的图算法
目录 图的表示 特殊的图 图的遍历 拓扑排序(Topological Sort) 强连通分量(Strongly Connected Components) 欧拉回路(Eulerian Circuit) 题选 图的表示 1.邻接矩阵(Adjacency Matrix) 2.邻接链表(Adjacency List) 3.完善邻接链表(Implementing Adjacency...
算法导论 第二十二章:图的搜索
图有两种标准的表示方法,即邻接矩阵和邻接表(通常邻接矩阵用于稠密图,邻接表用于稀疏图)。如下: 对于图的搜索有两种方法:深度优先搜索 & 广度优先搜索。 广度优先搜索(Breadth-first search) 广度优先搜索是将已发现和未发现顶点之间的边界沿其广度方向向外扩展。亦即算法首先会发现和s距离为k的所有点,然后才会发现和s距离为k+1的其他顶点。 伪代码:
算法导论习题分析—— 22章 基本的图算法
算法导论习题分析—— 22章 基本的图算法22-2 衔接点、桥和双连通分量abcdefgh代码实现 22-2 衔接点、桥和双连通分量 a 假如根节点在深度优先树中有两个子节点,则其中一个子节点必无法由其他节点搜索得到(否则就不是根节点的子节点了)。因此这个子节点只跟根节点相连,因此根节点是衔接点。 b 当一个节点vvv存在一个子节点,且该子节点与其后代节点不存在指向vvv的真祖先的后向边,则在深度...
《算法导论》笔记 第22章 22.3 深度优先搜索
【笔记】 【练习】
6572




被折叠的 条评论
为什么被折叠?



