`
128kj
  • 浏览: 600334 次
  • 来自: ...
社区版块
存档分类
最新评论

图的邻接表存储及遍历(JAVA)

    博客分类:
阅读更多
   为图的每个顶点所发出的边建立一个单链表,用一顶点数组存储每个单链表的头指针。




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 图 邻接表 深度优先遍历 广度优先遍历 最短路径

    用Java描述的图,以邻接表存储,包含常用算法

    邻接矩阵和邻接表存储的图的遍历

    本主题将深入探讨两种常见的图存储方式——邻接矩阵和邻接表,以及如何在这两种存储方式下实现深度优先遍历(DFS)和广度优先遍历(BFS)。 首先,邻接矩阵是一种直观的图表示方法,它使用二维数组来存储图中每个...

    java使用邻接表对图进行深度和广度优先遍历

    在这个Java程序中,我们将探讨如何使用邻接表来实现图的深度优先遍历(DFS)和广度优先遍历(BFS)。邻接表是图数据结构的一种有效实现方式,尤其对于稀疏图(边的数量远小于节点数量的平方)来说,它比邻接矩阵更加...

    数据结构 图的邻接表存储

    ### 数据结构:图的邻接表存储 #### 一、引言 在计算机科学中,图是一种非线性数据结构,由顶点集合V和边集合E组成,表示为G=(V,E)。图可以用来表示各种各样的关系,如社交网络中的朋友关系、互联网中的网页链接等...

    基于java数据结构实验基于邻接矩阵和邻接表的深度广度优先遍历图.pdf

    基于Java数据结构实验基于邻接矩阵和邻接表的深度广度优先遍历图 本实验报告的主要内容是基于Java数据结构实验,实验名称为“基于邻接矩阵和邻接表的深度广度优先遍历图”。实验的目的包括掌握图的相关概念、掌握用...

    数据结构图的邻接矩阵,邻接表存储表示,图的深度优先搜索遍历,广度优先搜索遍历

    在压缩包文件"数据结构图的邻接矩阵,邻接表存储表示,图的深度优先搜索遍历,广度优先搜索遍历_1602077415"中,包含了关于这些主题的详细资料,可能包括理论解释、代码示例和练习题,帮助读者深入理解和掌握图的存储...

    图的深度和广度遍历(Java实现)

    - **数据结构**:为了存储图,可以使用邻接矩阵或邻接表。邻接矩阵用二维数组表示,邻接表则使用链表或集合来存储每个节点的邻接节点。对于稀疏图(边的数量远小于顶点数量的平方),邻接表更节省空间。 - **访问...

    有向图存储和遍历-java实现.zip

    在Java中实现有向图,通常有两种常见的方式:邻接矩阵(Adjacency Matrix)和邻接表(Adjacency List)。本压缩包中的内容可能涉及这两种存储方式的实现以及图的遍历算法。 1. **邻接矩阵**:在邻接矩阵中,我们...

    邻接表无向图的Java语言实现完整

    邻接表无向图的基本操作包括图的遍历、图的搜索、图的插入、图的删除等。 4. 邻接表无向图的应用: 邻接表无向图广泛应用于计算机网络、数据挖掘、人工智能、计算机视觉等领域。 5. 邻接表无向图的优缺点: 邻接...

    数据结构 图 邻接表

    1. 节省内存:对于稀疏图,邻接表比邻接矩阵更节省空间,因为它只存储实际存在的边。 2. 操作效率高:在进行遍历、查找、添加和删除边等操作时,邻接表通常比邻接矩阵更快,因为只需要处理相关的顶点列表,而非整个...

    图的创立数据结构对其进行深度优先遍历和广度优先遍历

    在给定的代码中,图采用邻接表的方式存储。邻接表是每个顶点都有一个链表,链表中的元素代表与该顶点相连的所有顶点。这种数据结构适合于存储稀疏图,即边的数量远小于顶点数量的平方。 `ALgraph` 结构体代表图,...

    图的遍历(java)

    1. **数组/列表**:用于存储图的邻接矩阵或邻接表。 2. **栈**:在DFS中用于回溯。 3. **队列**:在BFS中用于按顺序访问节点。 4. **优先队列(堆)**:在Dijkstra算法中用于存储待处理的节点。 了解这些基本概念并...

    图的遍历(有向图和无向图)

    邻接表适用于稀疏图(边的数量远小于节点数量的平方),因为它存储空间更高效;而邻接多重表则适用于稠密图(边的数量接近节点数量的平方),因为它能更好地处理多个边的情况。 总结来说,图的遍历是理解和操作图...

    图的邻接矩阵实现及深度优先搜索(JAVA)

    在这个话题中,我们将深入探讨如何使用Java语言实现图的邻接矩阵表示法以及如何进行深度优先搜索(DFS)。 首先,邻接矩阵是一种二维数组,用于存储图中节点之间的连接信息。如果节点i和节点j之间存在边,那么邻接...

    java实现图的邻接表存储结构的两种方式及实例应用详解

    Java 实现图的邻接表存储结构的两种方式及实例应用详解 本文主要介绍了 Java 实现图的邻接表存储结构的两种方式及实例应用详解。图的邻接表是一种常用的图存储结构,它将图的顶点和边信息存储在一个数组中,使得图...

    基于java的图的实现(二) 图的两种遍历

    在“基于java的图的实现(二) 图的两种遍历”这个主题中,我们将深入探讨如何使用Java来实现图的数据结构以及它的两种主要遍历方法:深度优先搜索(DFS)和广度优先搜索(BFS)。 首先,我们需要理解图的基本概念。...

    数据结构 课程设计 图的存储与遍历

    1. **图的邻接表存储结构**: - 邻接表是一种高效存储图的方法,尤其适用于稀疏图(边的数量远小于顶点数量的平方)。每个顶点对应一个链表,链表中的节点表示与该顶点相连的其他顶点。 - 对于有向图,链表中的...

    图的广度优先遍历

    为了实现BFS,首先我们需要创建一个数据结构来存储图,如邻接矩阵或邻接表。然后,使用一个队列(先进先出)来存储待访问的节点。初始时,将起始状态入队。接着,进入一个循环,每次从队列头部取出一个节点,访问它...

Global site tag (gtag.js) - Google Analytics