图的数据结构:邻接矩阵(Java实现)

图G(V,E)是由顶点的有穷非空集合和顶点之间的边的集合组成,V是图中顶点的集合,E是边的集合

图最常用的两种数据结构是邻接矩阵和邻接表

邻接矩阵结构
用两个数组表示图,一个一维数组存储顶点信息,一个二维数组存储边的信息

class Graph <T>
{
	public  ArrayList<T> vertexes;  //储存顶点
	public int[][] edges;          	//邻接矩阵
	private int numOfVertexes;      //当前顶点的数量
	private int numOfEdges;         //当前边的数量
	
	public static final int INFINITY = 65535;     //有权图,代表不通,无权图为0
	/**
	 * @param n is the number of vertex
	 */
	public Graph(int n)
	{
		//将数组初始化,开始时所有边均不通
		 edges = new int[n][n];
		 for(int i = 0; i <n; i++)
			 Arrays.fill(edges[i], INFINITY);
		 
		 vertexes = new ArrayList<>(n);
		 numOfVertexes = 0;
		 numOfEdges = 0;
	}
	
	//插入顶点
	public void insertVertex(T vertex)
	{
		vertexes.add(vertex);
		edges[vertexes.indexOf(vertex)][vertexes.indexOf(vertex)] = 0;  //顶点与自身的权值为0
		numOfVertexes++;
	}
	
	//添加边:无向图
	public void insertEdge(int v1, int v2, int weight)
	{
		edges[v1][v2] = weight;
		edges[v2][v1] = weight;
		numOfEdges++;
		
	}
	//添加边:有向图
	/*
	public void insertEdge(int v1, int v2, int weight)
	{
		edges[v1][v2] = weight;
		numOfEdges++;
		
	}
	*/
	
	//显示邻接矩阵
	public void showGraph()
	{
		for(int[] link : edges)
			System.out.println(Arrays.toString(link));
	}
	
	//获取顶点数量
	public int getNumOfVertexes()
	{
		return numOfVertexes;
	}
	
	//返回顶点i对应的数据
	public T getValueByIndex(int i)
	{
		return vertexes.get(i);
	}
	
	//返回两个顶点之间的权值
	public int getWeight(int v1, int v2)
	{
		return edges[v1][v2];
	}
	
	

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值