图的邻接矩阵实现

本文介绍如何使用邻接矩阵存储无向图,包括图的建立、删除、广度和深度优先遍历以及Prim最小生成树算法。通过维护顶点数组和二维关系矩阵,动态扩展和调整矩阵以适应图的变化。详细讲解了添加、删除边和顶点的操作,以及广度优先遍历的实现。
摘要由CSDN通过智能技术生成
用邻接矩阵存放图中顶点的关系,实现无向图的邻接矩阵存储。

1)图的建立,删除(添加,删除边/顶点)
2)广度和深度优先遍历
3)prim最小生成树


1,成员变量,构造函数,以及数组扩展

实现策略:维护一个顶点的数组,以及一个二维的数组来表示顶点之间的关系,维护2个基本变量记录顶点和边的数量。

重点是:1)可以动态扩展顶点数组,并保持数组的连续性,这意味着删除顶点时后面的顶点要前移,那么顶点的编号也变了,关系矩阵也要改变。    2)关系矩阵也动态维护,随时保持和顶点数组一样大。顶点数组的长度为VNodes.length,实际存放了顶点的位置只到了size()处,对应的,关系矩阵的大小为int[VNodes.length][VNodes.length],实际有效地区域也只在左上角的int[size()][size()]范围内

复制代码
  
  
  
/*总是将关系矩阵保持和顶点数组大小对应,顶点数组不一定放满,关系矩阵也只
* 在左上角放满,顶点数组放满的大小为size(),关系矩阵也只到size()
*/
private VNode[] VNodes;
private int[][] M;

private int nodeCount;
private int edgeCount;

public MatUnDirectedGraph()
{
VNodes
= new VNode[5];
M
= new int[5][5];
nodeCount
= 0;
edgeCount
= 0;
}

public void expand()
{
VNode[] larger
= new VNode[VNodes.length * 2];//顶点数组扩大
int[][] M_larger = new int[larger.length][larger.length];//关系矩阵也要扩展
for(int i = 0;i < VNodes.length;i++)
{
larger[i]
= VNodes[i];
for(int j = 0;j < VNodes.length;j++)
M_larger[i][j]
= M[i][j];
}
VNodes
= larger;
M
= M_larger;
}
复制代码




2,建图,删图相关方法分析


用邻接矩阵存储表示顶点之间的关系果然比邻接表在代码实现上简单很多

1)添加边,只需要在关系矩阵M的两个位置上赋值即可,而在邻接表实现中,要在2个顶点的边链表的最后都添加上一个边

2)删除边,1)的逆过程,将那2个位置的值置为0即可,而在邻接表的实现中,也是要到边链表中去删(还要记录被删边得前缀)

3)添加顶点,直接在顶点数组中添加一个,注意如果满的话,要扩展,在扩展方法中,已经实现了同时扩展关系矩阵(将矩阵变大了,左上角有效区域还是不变)。在邻接表中这个稍微简单点,因为邻接表直接扩展数组即可,关系不用动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值