图的邻接矩阵存储

来源:互联网 发布:淘宝购买流程 编辑:程序博客网 时间:2024/05/16 05:48

  一般的图会使用二元组的方式来描述,G=(V,E) ,其中V 叫作顶点集,E叫作边集。

       图分为: (1)无向图 (2)有向图 

       图的表示和存储方式:  (1)邻接矩阵表示法 (2)邻接表表示法

       邻接矩阵:存储为二维数组,假设一个图的顶点集的个数为V,则这个二维数组就是V*V的二维数组。

                         在邻接矩阵的表示法中,数组的每个元素要么是0,要么是1. 

       图的邻接矩阵存储的实现代码如下:

package com.threeTop.www;public class MatrixGraph {//通过下标映射元素值private int[] mapping;//图的二维数组private int[][] matrix;/** * 初始化图的顶点 * @param vertexes 顶点数组 */ public MatrixGraph(int []vertexes) {  int length=vertexes.length; mapping=new int[length]; matrix=new int[length][length]; //图的二维矩阵 for(int i=0;i<length;i++) {mapping[i]=vertexes[i];  }    }  /**  * 添加边  * @param start  * @param end  */ public void addEdge(int start,int end) { int x=-1; int y=-1;  //寻找坐标 for(int i=0;i<mapping.length;i++) { if(x!=-1&&y!=-1) { break; } if(start==mapping[i]) { x=i; } if(end==mapping[i]) { y=i; } }  //判断顶点是否存在 if(x==-1||y==-1||x>mapping.length-1||y>mapping.length-1) { throw new IndexOutOfBoundsException("边的顶点不存在!"); } //增加边 matrix[x][y]=1;  }  /**  *输出矩阵   *  */ public void printMatrix() { System.out.println("输出的邻接矩阵如下:"); for(int i=0;i<matrix.length;i++) {   for(int j=0;j<matrix[i].length;j++)   {     //输出一行的数据   System.out.print(matrix[i][j]);   }     System.out.println(); } }public static void main(String []args){int[] vetexes={0,1,2,3};MatrixGraph graph=new MatrixGraph(vetexes);graph.addEdge(0, 1);graph.addEdge(0, 2);graph.addEdge(0, 3);graph.addEdge(1, 2);graph.addEdge(3, 2);graph.printMatrix();}}

0 0
原创粉丝点击