一.邻接表实现 思路:一边遍历,一边倒置边,并添加到新的图中 邻接表实现伪代码: for each u 属于 Vertex for v 属于 Adj[u] Adj1[v].insert(u); 复杂度:O(V+E); 输入: 3 3 a b b c c a 源代码: package C22; import java.util.Iterator; public class C1_3{ public static Adjacent_List getTransposeGraph(Adjacent_Li…
(搬运)<算法导论>习题解答 Chapter 22.1-1(入度和出度) 思路:遍历邻接列表即可; 伪代码: for u 属于 Vertex for v属于 Adj[u] outdegree[u]++; indegree[v]++; 源代码: package C22; import java.util.Iterator; public class C1_1 { static int[] indegree; static int[] outdegree; static Adjacent_List…
一.邻接矩阵实现 思路:如果是邻接矩阵存储,设邻接矩阵为A,则A*A即为平方图,只需要矩阵相乘即可: 伪代码: for i=1 to n for j=1 to n for k=1 to n result[i][j]+=matrix[i][k]*matrix[k][j]; 算法复杂度 两个n维数组相乘,因此复杂度为O(V^3),当然可以通过Strassen算法稍加改进. 扩展:这种方法的作用是比如求u到v路径长度为k的路径数目,只需要求A^k,然后[u][v]即可. 算法正确性分析 命题:给定两点…
思路:设置两个游标i指向行,j指向列,如果arr[i][j]==1,则i=max{i+1,j},j++:如果arr[i][j]==0,则j=max{i+1,j+1}. 伪代码: has_universal_sink() for i=1 to N //对角线检查是否全是0 if A[i][i]==1 return false; i=1,j=2 while(i<=N && j<=N) if(A[i][j]==1) i=max{i+1,j} j++ else j=max{i+1,j+…
思路:重开一个新图,按着邻接列表的顺序从上到下遍历,每遍历一行链表前,清空visited数组,如果没有访问过这个元素,则加入新图,如果已经访问过了(重边),则不动. 伪代码: 复杂度:O(V+E) for each u 属于 Vertex visited[u] = false; for u 属于 Vertex visited[u] = true; for v 属于 Adj[u] if(!visited[v]) Adj1[u].insert(v); visited[v] = true; for v…
一般散列表都与B+树进行比较,包括在信息检索中也是. 确定某条边是否存在需要O(1). 不足: (1)散列冲突. (2)哈希函数需要不断变化以适应需求. 另外:B+树.(见第18章) 与散列表相比的不足: (1)插入需要O(lgn) (2)树要保持平衡. (原文点此,索引目录.感谢xiazdong君 && Google酱.这里是偶尔做做搬运工的水果君(^_^) )…
主对角线:出度+入度 其他:arr[i][j]=-n,则i与j之间有n条边. 证明: (原文点此,索引目录.感谢xiazdong君 && Google酱.这里是偶尔做做搬运工的水果君(^_^) )…
链表如图: 矩阵: 1 2 3 4 5 6 7 1 0 1 1 0 0 0 0 2 1 0 0 1 1 0 0 3 1 0 0 0 0 1 1 4 0 1 0 0 0 0 0 5 0 1 0 0 0 0 0 6 0 0 1 0 0 0 0 7 0 0 1 0 0 0 0 (原文点此,索引目录.感谢xiazdong君 && Google酱.这里是偶尔做做搬运工的水果君(^_^) )…
Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的实现做出了性能上的要求,所以,在一般的应用场合,标准库类型都有足够的效率. 2. 当用一个字符串字面值初始化string对象时,除了最后那个空字符外其他所有的字符都会被拷贝到新创建的string对象中去. 3. 如果使用等号初始化一个变量,实际上执行的是拷贝初始化.如果不使用等号,则执行的是直接初始…
Chapter 2.1 1. 数据类型决定了程序中数据和操作的意义. 2. C++定义了一套基本数据类型,其中包括算术类型和一个名为void的特殊类型.算术类型包含了字符.整型.布尔值以及浮点数.void无值也无操作,我们不能定义一个void类型的变量. 3. 算术类型的尺寸,也就是该类型所占的比特数,在不同机器上有所差别.下表列出了C++标准规定的最小尺寸,同时允许编译器赋予这些类型更大的尺寸: 由于比特数的不同,一个类型所能表达的最大(最小)值也是不同的. 4. C++语言规定,一个int至…