赞
踩
java实现数据结构图g(graph)的创建,以以下图片中图为例(来自于大话数据结构):
顶点数是5,定义无穷大为MAX用以较大整数代替;创建图的代码和思路如下所示:
package graph;//自己代码定义的包名
import java.util.Scanner;//代码中使用了Scanner类
class Graph{
//定义一下的属性变量
private int vertexSize;//顶点数量,虽然是私有的,但是可以用set get方法进行设置
//问题1.eclipse提醒未使用vertexSize,原因是什么?
private int [] vertex;//定义顶点数组
private int [] [] matrix;//定义邻接矩阵,是一个二维数组
private static final int MAX=50;//设置最大权重50代表无穷大,常量 因为是静态私有的常量,只能在本类中有效
//图类的构造函数
public Graph(int vertexSize){
this.vertexSize = vertexSize;//接收传来的顶点数 在邻接矩阵的定义处可以知道,传的数是5
matrix=new int [vertexSize] [vertexSize];//邻接绝阵是方阵,行列是定点数
//创建顶点数组,其实就是用顶点个数定义顶点数组,最终定点数组的内容是0,1,2,3,4
vertex=new int [vertexSize];
for(int i=0;i<vertexSize;i++){
vertex[i]=i;
}
}
//创建vertex的set get方法 快捷键: alt+shift+s
public int[] getVertex() {
return vertex;
}
public void setVertex(int[] vertex) {
this.vertex = vertex;//可以调用图的这个方法设置图的顶点数组
}
//---主函数部分
public static void main(String[] args) {
Graph graph = new Graph(5);//创建一个真正的图,顶点数是5,并输入邻接矩阵具体值
//这里的5难道不是在使用vertexSize吗?
int [] a1=new int[]{0,MAX,MAX,MAX,6};
int [] a2=new int[]{9,0,3,MAX,MAX};
int [] a3=new int[]{2,MAX,0,5,MAX};
int [] a4=new int[]{0,MAX,MAX,0,1};
int [] a5=new int[]{0,MAX,MAX,MAX,0};//创建5个一维数组
//将每行的数据赋值给图的邻接矩阵,邻接矩阵每行就是一个数组
graph.matrix[0]=a1;
graph.matrix[1]=a2;
graph.matrix[2]=a3;
graph.matrix[3]=a4;
graph.matrix[4]=a5;//到此邻接矩阵创建完成
//---使用输入的方式查询项要看的顶点,应该还加上判断顶点是否超出范围
System.out.println("输入你想查看的顶点:");
Scanner sc =new Scanner(System.in );
int mm=0;
if(sc.hasNext())
mm=sc.nextInt();
int num = graph.getOutDegree(mm);
System.out.println("顶点"+mm+"的出度是:"+num);
sc.close();
}
//测试1:获取某个顶点的出度,即是邻接矩阵中这个顶点对应的行中大于0小于无穷大的数字
public int getOutDegree(int index){
int degree=0;//初始化出度为0
for(int j=0;j<matrix[index].length;j++){
if(matrix[index][j]>0 & matrix[index][j]<MAX)
degree++;
}
return degree;
}
}
代码验证没问题!
运行根据提示输入0~4查寻顶点的出度,可以考虑加入判断顶点是否存在的语句,比如输入5则报错,表示没有这个顶点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。