一般的图会使用二元组的方式来描述,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();
}
}