为图的每个顶点所发出的边建立一个单链表,用一顶点数组存储每个单链表的头指针。
import java.util.*;
class VNode{
int from;//边的起点
Edge first;//以from为起点的第一条边
public VNode(int from){
this.from=from;
first=null;
}
}
class Edge{
int to;//边的终点
Edge next;//具有同一起点的下一条边
public Edge(int to){
this.to=to;
next=null;
}
}
public class Graph{
int k;//图的顶点数
VNode[] V;//顶点数组
boolean[] visted;//记录某个顶点是否遍历过
public Graph(int k,VNode[] v){
this.k=k;
this.V=v;
visted = new boolean[k];
}
//从v0顶点出发广度优先遍历图
private void BFS(int v0){
Queue<Integer> que=new LinkedList<Integer>();
que.add(v0);
while(!que.isEmpty()){
v0=que.poll();
if(!visted[v0]){
System.out.print(v0+" ");
visted[v0]=true;
}
Edge e=V[v0].first;
while(e!=null){
if(!visted[e.to]) que.add(e.to);
e=e.next;
}
}
}
//邻接表深度优先搜索图
private void DFS(int v0){
visted[v0]=true;
//访问顶点v0
System.out.print(v0+" ");
Edge p=V[v0].first;
while(p!=null){
if(!visted[p.to]){
DFS(p.to);
}
p=p.next;
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int k=sc.nextInt();//图的顶点数
int m=sc.nextInt();//图的边数
VNode[] V=new VNode[k];
for(int i=0;i<k;i++)
V[i]=new VNode(i);
Edge e=null;Edge e1=null;
int u=0;int v=0;
for(int i=0;i<m;i++){
u=sc.nextInt();//起点
v=sc.nextInt();//终点
e=new Edge(v);
e.next=V[u].first;//插入到链表开头
V[u].first=e;
//对于无向图作对称处理
e1=new Edge(u);
e1.next=V[v].first;
V[v].first=e1;
}
Graph gra=new Graph(k,V);
// gra.BFS(0);
gra.DFS(0);
}
}
程序运行:
C:\java>java Graph
6
10
0 1
0 2
0 3
1 2
1 4
2 4
2 5
2 3
3 5
4 5
0 3 2 1 5 4(广搜)
C:\java>java Graph
6
10
0 1
0 2
0 3
1 2
1 4
2 4
2 5
2 3
3 5
4 5
0 3 5 4 2 1(深搜)
下载源码:
- 大小: 5.3 KB
- 大小: 25.4 KB
- 大小: 23.2 KB
分享到:
相关推荐
用Java描述的图,以邻接表存储,包含常用算法
图的邻接矩阵和邻接表存储形式,并实现深度优先遍历和广度优先遍历
功能 图的广度优先遍历,深度优先遍历 拓扑排序 深度优先生成森林 关键路径
数据结构图的邻接矩阵,邻接表存储表示,图的深度优先搜索遍历,广度优先搜索遍历 数据结构图的邻接矩阵,邻接表存储表示,图的深度优先搜索遍历,广度优先搜索遍历.rar
数据结构中,有关图的遍历的Java程序,适用于MyEclipse10.
对任意给定的图(顶点数不小于20,边数不少于30,图的类型可以是有向图、无向图、有向网、无向网),能够输入图的顶点和边(或弧)的信息,并存储到相应存储结构(邻接矩阵、邻接表、十字链表、邻接多重表,任选其中...
1)实现图的邻接矩阵和邻接表存储结构; 2)完成基于邻接矩阵的深度优先搜索遍历及广度优先搜索遍历; 3)实现从键盘输入任意一对顶点,求出顶点间的最短路径。
实现深度遍历邻接表存储的图,从中大家可以了解到图的概念,边和顶点的概念,存储图的概念
用邻接矩阵存储方式或邻接表的存储方式创建图,接着求出所创建图中某一顶点的度,实现所创建图的深度优先和广度优先遍历,最后判断任一图是否连通。
试设计一个程序,演示在连通和非连通的无向图上访问全部结点的操作 稀疏矩阵是指那些多数元素为零的矩阵。利用“矩阵”的特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的...
例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...
例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...
例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...
例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...
例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...
例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...
描述:使用邻接表实现树(二元和 N 元)和图的演示实现 主要操作:二叉树(preorder/inorder/postorder tree walk),N-ary Tree(postorder/DFS/BFS tree walk),Graph(DFS/BFS遍历,图反转) 测试代码:Main....
例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...
例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...