此篇文章为实现《算法》一书中提到的大部分无向图算法,分为多篇,
即多个Java文件,可以直接复制,便于学习;
第二篇,java无向图的类实现,此篇主要列出实现的方法,需要参考其他类中方法(后续实现);
参考链接:https://www.cnblogs.com/xiaohuiduan/p/11352209.html#e5b9bfe5baa6e4bc98e58588e9818de58e86_6
/**
* FileName: UndirGraph
* Author: Jerry
* Date: 2020/2/10 19:48
* Description: 无向图的数据结构
*/
package graph;
import java.util.ArrayList;
import java.util.List;
public class UndirGraph extends Graph {
/**
* 继承父类的构造函数
* @param V
*/
public UndirGraph(int V) {
super(V);
}
/**
* 在图中添加一条边v-w
* @param v
* @param w
*/
@Override
void addEdge(int v, int w) {
adj[v].add(w);
adj[w].add(v);
this.E++;
}
/**
* 获得与v相邻的所有顶点
* @param v
* @return
*/
@Override
Iterable adj(int v) {
return adj[v];
}
/**
* 获得与s相连通的所有顶点
* @param s
* @return
*/
@Override
Iterable search(int s) {
DepthFirstSearch dfs = new DepthFirstSearch(this, s);
List list = new ArrayList();
for (int i = 0; i < this.V(); i++) {
if (dfs.getMarked(i)) {
list.add(i);
}
}
return list;
}
/**
* 是否存在s结点到v结点的路径
* @param s
* @param v
* @return
*/
@Override
boolean hasPathTo(int s, int v) {
DepthFirstSearchPath dfsPath = new DepthFirstSearchPath(this,s);
return dfsPath.hasPathTo(v);
}
/**
* 找出s到v的路径
* @param s
* @param v
* @return
*/
@Override
Iterable pathTo(int s, int v) {
DepthFirstSearchPath dfsPath = new DepthFirstSearchPath(this,s);
return dfsPath.pathTo(v);
}
}