邻接表实现图的广搜和深搜(java模板)
2013-02-24 19:04
288 查看
//邻接表实现图的广搜和深搜(java模板)
Java代码
import java.util.*;
public class GraphSearch{
private int n; //图的顶点数,顶点为0,1,2,,,,n-1
private List<ArrayList<Integer>> G;// 邻接表实现图。
private boolean[] visited;//判断顶点是否被访问过
public GraphSearch(int n,List<ArrayList<Integer>> G){
this.n=n;
this.G=G;
visited = new boolean
;
}
public static void main(String[] args) {
int n,m;
List<ArrayList<Integer>> G;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
G = new ArrayList<ArrayList<Integer>>();
for(int i = 0;i<n;i++)
G.add(new ArrayList<Integer>());//初始化邻接表
for(int i=0;i<m;i++) {
int u = sc.nextInt();
int v = sc.nextInt();
if(!G.get(u).contains(v)) {// 避免重边的情况比如a b可能出现两次的情况
G.get(u).add(v);
}
//对于无向图
if(!G.get(v).contains(u)) {
G.get(v).add(u);
}
}
GraphSearch ma=new GraphSearch(n,G);
//ma.dfs(0);
ma.bfs(0);
}
// 深搜
private void dfs(int v) {
visited[v] = true;
System.out.print(v+" ");
for (int i = 0; i <G.get(v).size(); i++) {
//递归调用搜索没有被访问过的当前节点的下一个节点(邻接点)
int k=G.get(v).get(i);
if (!visited[k])
dfs(k);
}
}
//广搜
private void bfs(int v) {
//队列用来保存被访问节点的分支节点(邻接点)
Queue<Integer> que = new LinkedList<Integer>();
que.offer(v);
while (!que.isEmpty()) {
v = que.poll();
System.out.print(v+" ");
visited[v] = true;
//将被访问节点的分支节点(邻接点)加入到队列中
for (int i = 0; i <G.get(v).size(); i++) {
int k=G.get(v).get(i);
if (!visited[k]){
que.add(k);
visited[k] = true;
}
}
}
}
}
Java代码
import java.util.*;
public class GraphSearch{
private int n; //图的顶点数,顶点为0,1,2,,,,n-1
private List<ArrayList<Integer>> G;// 邻接表实现图。
private boolean[] visited;//判断顶点是否被访问过
public GraphSearch(int n,List<ArrayList<Integer>> G){
this.n=n;
this.G=G;
visited = new boolean
;
}
public static void main(String[] args) {
int n,m;
List<ArrayList<Integer>> G;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
G = new ArrayList<ArrayList<Integer>>();
for(int i = 0;i<n;i++)
G.add(new ArrayList<Integer>());//初始化邻接表
for(int i=0;i<m;i++) {
int u = sc.nextInt();
int v = sc.nextInt();
if(!G.get(u).contains(v)) {// 避免重边的情况比如a b可能出现两次的情况
G.get(u).add(v);
}
//对于无向图
if(!G.get(v).contains(u)) {
G.get(v).add(u);
}
}
GraphSearch ma=new GraphSearch(n,G);
//ma.dfs(0);
ma.bfs(0);
}
// 深搜
private void dfs(int v) {
visited[v] = true;
System.out.print(v+" ");
for (int i = 0; i <G.get(v).size(); i++) {
//递归调用搜索没有被访问过的当前节点的下一个节点(邻接点)
int k=G.get(v).get(i);
if (!visited[k])
dfs(k);
}
}
//广搜
private void bfs(int v) {
//队列用来保存被访问节点的分支节点(邻接点)
Queue<Integer> que = new LinkedList<Integer>();
que.offer(v);
while (!que.isEmpty()) {
v = que.poll();
System.out.print(v+" ");
visited[v] = true;
//将被访问节点的分支节点(邻接点)加入到队列中
for (int i = 0; i <G.get(v).size(); i++) {
int k=G.get(v).get(i);
if (!visited[k]){
que.add(k);
visited[k] = true;
}
}
}
}
}
相关文章推荐
- 做了一道跑大数据的最短路挂了,基于vector的二维模拟邻接表实现Dijkstra算法(*【模板】)
- java 利用泛性和反射机制实现collections.sort排序模板
- Java实现基于邻接表的图的深度和广度遍历
- mogoTemplate 模板 实现mongodb java的操作 ,根据经纬度查询周边
- 用邻接表表示图【java实现】
- java实现赋值Excel模板并写入后导出
- java 实现的excel数据导入及导入模板下载
- iText的使用例子说明(利用Itext画模板导出word、pdf,纯java实现)
- Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor
- JAVA实现图的邻接表以及DFS
- Java实现通过poi把数据查出来放在模板Excel中并作为附件发送邮件
- 07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao
- 邻接表无向图的Java语言实现完整源码
- 邻接表存储图Java实现
- java-web-PIO实现自动生成excel录入模板(实现下拉列表框)[
- 一个简单的Java模板工具类(二)—简单表达式解析实现
- Java模板方法模式中的HookMethod实现
- 07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao
- 设计模式之模板方法模式(Java实现)
- Python3 -- 通过pandas实现快速创建java实体代码模板