【数据结构】图形的多种表示方法及其java实现之相邻矩阵法

图形是由多个定点以及连接定点的边构成的集合。通常用G=(V,E)表示,其中V为所有顶点的集合,E为所有边的集合。图形可分为无向图形和有向图形,如:             

        左图为无向图形,表示为:V={A,B,C,D,E};E={(A,B),(A,D),(A,E),(B,C),(B,D),(C,D),(C,E)}。右图为有向图形,表示为:V={A,B,C,D,E};E={<A,B>,<A,E>,<B,D>,<C,D>,<C,B>,<D,A>,<E,C>}。

        图形的表示方法有四种:相邻矩阵法,相邻表法,相邻多元列表法以及索引表格法。

        相邻矩阵法:用一个n*n的二维矩阵来记录各节点之间的关系,其中n为节点的数量,1表示对应两个节点之间有连接,0表示没有。如上左右两图形可用相邻矩阵法分别表示如下:

 ABCDE
A01011
B10110
C01011
D11100
E10100

 ABCDE
A01001
B00010
C01010
D10000
E00100

        生成相邻矩阵的代码如下:

package javaTest;

public class GraphExpress {
	public static void main(String args[]){
		int[][] data1 = {
				{1,2},{2,1},{1,4},{4,1},
				{1,5},{5,1},{2,3},{3,2},
				{2,4},{4,2},{3,4},{4,3},
				{3,5},{5,3}
		};
		int[][] data2 = {
				{1,2},{1,5},{2,4},{3,2},
				{3,4},{4,1},{5,3}
		};
		System.out.println("无向图的相邻矩阵:");
		adjacentMatrix(data1);
		System.out.println("有向图的相邻矩阵:");
		adjacentMatrix(data2);
	}
	
	public static void adjacentMatrix(int[][] data){
		int maxData = 0;
		for(int i=0; i<data.length; i++){//确定相邻矩阵的尺寸
			for(int j=0; j<data[i].length; j++){
				if(data[i][j]>maxData) maxData = data[i][j];
			}
		}
		
		int[][] matrix = new int[maxData+1][maxData+1];//根据输入数据data完善相邻矩阵
		for(int i=0; i<data.length; i++){
			matrix[data[i][0]][data[i][1]] = 1;
		}
		
		for(int i=1; i<matrix.length; i++){//输出相邻矩阵
			for(int j=1; j<matrix[i].length; j++){
				System.out.print("["+matrix[i][j]+"] ");
			}
			System.out.println();
		}
	}
}


输出:

无向图的相邻矩阵:
[0] [1] [0] [1] [1] 
[1] [0] [1] [1] [0] 
[0] [1] [0] [1] [1] 
[1] [1] [1] [0] [0] 
[1] [0] [1] [0] [0] 
有向图的相邻矩阵:
[0] [1] [0] [0] [1] 
[0] [0] [0] [1] [0] 
[0] [1] [0] [1] [0] 
[1] [0] [0] [0] [0] 
[0] [0] [1] [0] [0] 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值