您的位置:首页 > 理论基础 > 数据结构算法

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

2016-05-16 15:58 519 查看
图形是由多个定点以及连接定点的边构成的集合。通常用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] 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息