图1---------------图的表示和遍历算法

图的表示方法:

邻接矩阵法(太浪费空间,但确实把所有信息都表示了出来,计算度或者各种操作的话很方便,当然用无向图的对称性、只存放非0结点可以优化)

邻接表(算比较好的一种方法,但是对于有向图计算入度必须遍历,用逆邻接表、十字链表优化)

十字链表(和邻接表太类似)


遍历算法:

图是标准的多对多结构,因此不构成环并且不重复访问vertex需要一个标志数组visited,循环这个保证全部都访问,遍历过程中可以有DFS和BFS

DFS:递归方式,首先访问vertex,循环找邻接节点,找到并且该vertex没有被访问过,将顶点当成参数进入下一层。

BFS:需要堆栈配合,找到自己邻接的顶点如果没有被访问过则访问并将其入栈,然后用stack非空控制循环直到全部访问过。


还有一些计算连通分量个数、度的问题,就是遍历算法的应用。


代码(结构写的有点乱,回头看的时候可以优化下):

  1. package nuaa.ds;  
  2.   
  3. public class Graph {  
  4.     private String[] vertexes;//邻接矩阵法所  
  5.     private int[][] vr;       //使用的成员变量  
  6.     private CreateGraph g;  
  7.       
  8.     private VertexNode[] vertexNodes;//邻接表所使用的成员变量  
  9.   
  10.       
  11.     /** 
  12.      * 图的构成实在太多,写个标准无向图熟悉算法 
  13.      * 顶点ABCD(其中BC不连)彼此互连,EF彼此互连 
  14.      */  
  15.     public Graph(CreateGraph c){  
  16.         this.g = c;  
  17.         switch(c){  
  18.         case AdjacencyMatrix://邻接矩阵  
  19.             vertexes = new String[]{ "A","B","C","D","E","F"};//ABCDEF6个顶点  
  20.             vr = new int[6][6];  
  21.             vr[0] = new int[]{ 0,1,1,1,0,0};//邻接矩阵法表示边,相连值为1,不连值为0  
  22.             vr[1] = new int[]{ 1,0,0,1,0,0};//优点是所有信息全部显示出来  
  23.             vr[2] = new int[]{
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值