《算法导论》习题解答 Chapter 22.1-3(转置图)
一、邻接表实现
思路:一边遍历,一边倒置边,并添加到新的图中
邻接表实现伪代码:
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_List g){
Adjacent_List Gt = new Adjacent_List(g.getSize());
for(int u=0;u<g.getSize();u++){
Iterator<String> iter = g.getListByVertexIndex(u).iterator();
while(iter.hasNext()){
String vstr = iter.next();
Gt.addEdge(vstr , g.getVertexValue(u)); //添加导致边
}
}
return Gt;
}
public static void main(String[] args) throws Exception {
Adjacent_List adjlist = GraphFactory.getAdjacentListInstance("input\\transpose_input.txt");
System.out.println("====原图===");
adjlist.printAllEdges();
Adjacent_List transposeGraph = getTransposeGraph(adjlist);
System.out.println("=====倒置图=====");
transposeGraph.printAllEdges();
}
}
二、邻接矩阵实现
思路:遍历二维数组,并A'[i][j] = A[j][i];
伪代码:
for i = 1 to V
for j = 1 to V
A'[j][i] = A[i][j];
复杂度:O(V^2);
源代码:
package C22; import java.util.Iterator; public class C1_3{ public static Adjacent_Matrix getTransposeMatrix(Adjacent_Matrix g){
Adjacent_Matrix Gt = new Adjacent_Matrix(g.getSize());
for(int i=0;i<g.getSize();i++){
for(int j=0;j<g.getSize();j++){
Gt.setEdge(g.getVertexValue(j), g.getVertexValue(i), g.getElement(i, j));
}
}
return Gt;
}
public static void main(String[] args) throws Exception {
Adjacent_Matrix adj_matrix = GraphFactory.getAdjacentMatrixInstance("input\\transpose_input.txt");
adj_matrix.printAllEdges();
System.out.println("================");
Adjacent_Matrix Gt = getTransposeMatrix(adj_matrix);
Gt.printAllEdges();
}
}
(原文点此,索引目录。感谢xiazdong君
&& Google酱。这里是偶尔做做搬运工的水果君(^_^)
)
《算法导论》习题解答 Chapter 22.1-3(转置图)的更多相关文章
- (搬运)《算法导论》习题解答 Chapter 22.1-1(入度和出度)
(搬运)<算法导论>习题解答 Chapter 22.1-1(入度和出度) 思路:遍历邻接列表即可; 伪代码: for u 属于 Vertex for v属于 Adj[u] outdegre ...
- 《算法导论》习题解答 Chapter 22.1-5(求平方图)
一.邻接矩阵实现 思路:如果是邻接矩阵存储,设邻接矩阵为A,则A*A即为平方图,只需要矩阵相乘即可: 伪代码: for i=1 to n for j=1 to n for k=1 to n resul ...
- 《算法导论》习题解答 Chapter 22.1-6(求universal sink 通用汇点)
思路:设置两个游标i指向行,j指向列,如果arr[i][j]==1,则i=max{i+1,j},j++:如果arr[i][j]==0,则j=max{i+1,j+1}. 伪代码: has_univers ...
- 《算法导论》习题解答 Chapter 22.1-4(去除重边)
思路:重开一个新图,按着邻接列表的顺序从上到下遍历,每遍历一行链表前,清空visited数组,如果没有访问过这个元素,则加入新图,如果已经访问过了(重边),则不动. 伪代码: 复杂度:O(V+E) f ...
- 《算法导论》习题解答 Chapter 22.1-8(变换邻接表的数据结构)
一般散列表都与B+树进行比较,包括在信息检索中也是. 确定某条边是否存在需要O(1). 不足: (1)散列冲突. (2)哈希函数需要不断变化以适应需求. 另外:B+树.(见第18章) 与散列表相比的不 ...
- 《算法导论》习题解答 Chapter 22.1-7(关联矩阵的性质)
主对角线:出度+入度 其他:arr[i][j]=-n,则i与j之间有n条边. 证明: (原文点此,索引目录.感谢xiazdong君 && Google酱.这里是偶尔做做搬运工的水果君( ...
- 《算法导论》习题解答 Chapter 22.1-2(邻接矩阵与链表)
链表如图: 矩阵: 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 ...
- C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 3
Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的 ...
- C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 2
Chapter 2.1 1. 数据类型决定了程序中数据和操作的意义. 2. C++定义了一套基本数据类型,其中包括算术类型和一个名为void的特殊类型.算术类型包含了字符.整型.布尔值以及浮点数.vo ...
随机推荐
- 实时监控MySql状态
大多网站的性能瓶颈都会出在数据库上,所以想把Mysql监控起来,就搜索了下相关资料. 后来和同事讨论了下cacti和nagios有些老套和过时,graphite比较时尚,然后就搜了下相关的资料,最后搞 ...
- GWT工程架构分析与理解
上一篇文章中介绍了GWT技术的一些理论性的东西,涉及到GWT得一些技术原理及实现.接下来笔者将通过创建一个GWT工程去理解分析GWT工程架构. GWT工程架构解析 笔者使用的是Eclipse插 ...
- UVa 1312 Cricket Field (枚举+离散化)
题意:在w*h的图上有n个点,要求找出一个正方形面积最大,且没有点落在该正方形内部. 析:枚举所有的y坐标,去查找最大矩形,不断更新. 代码如下: #include <cstdio> #i ...
- Docker 入门教程
几个月以前,红帽(Red Hat)宣布了在 Docker 技术上和 dotCloud 建立合作关系.在那时候,我并没有时间去学习关于 Docker 的知识,所以在今天,趁着这个 30 天的挑战,我决定 ...
- android手机ping不通linux的ip地址
我的linux是装载虚拟机里的,修改虚拟机的网络连接方式为桥接模式即可.
- thinkphp 3+ 观后详解 (2)
接上一章的内容,我们继续来看Think.class.php文件的start方法 static public function start() { // 注册AUTOLOAD方法 spl_autoloa ...
- HITAG 1/2/S
HITAG S -- 3rd generation HITAG™ family Modulation Read/Write Device to Transponder: 100 % ASK and B ...
- Java数据结构之线性表(2)
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- 如何修改meclipse中的默认浏览器
window------->preferrences------------>general-------------->web browser---------->选择你要使 ...
- grunt入门之grunt watch的使用
watch几乎是grunt必不可少的应用,一旦配置好watch,保存文件后将立即执行命令 安装方式如下: npm install grunt-contrib-watch --save-dev 安装好以 ...