一、图的基本概念
关于什么是图,为什么要用图,图的要素是什么,创建图的方式,网上的资料很多,就不再多加叙述了,可见下面的视频链接:
图的基本概念及其创建思路
二、Java代码创建图
这里使用邻接矩阵的方法创建图,简单而言就是创建一个矩阵,这个矩阵的值0,1,分别表示顶点的连通状态,0表示不连通,1表示连通,注意行索引名称和列索引名称是假定的,java二维数组是没有行列名称索引的,只有数字索引,从0开始,如AB表示的点的索引为(0,1),其值为1,表示连通。
/**
* nodelist节点集合装节点,如A,B,C----,matrix矩阵表示边,numedge边的数量
* 主要代码是矩阵的创建,也就是添加边的部分
*/
package mypackage;
import java.util.ArrayList;
import java.util.Arrays;
class Graph {
// 成员变量,nodelist节点集合,如A,B,C----,matrix矩阵,numedge边的数量
public ArrayList<String> nodelist;
public int[][] matrix;
public int numedge;
// 构造方法,传入节点个数
// 初始化边为0,初始化矩阵大小为nn,初始化集合大小为n
public Graph(int n) {
this.numedge = 0;
matrix = new int[n][n];
nodelist = new ArrayList<>(n);
}
// 插入节点
public void insertnode(String node) {
nodelist.add(node);
}
// 添加边
// 先在矩阵中表示交叉处的值,再将边的数量+1
// v1,v2是索引,value是0或者1
public void insertedge(int v1, int v2, int value) {
matrix[v1][v2] = value;
// 因为是双向的,所以还要matrix[v2][v1]=value;
matrix[v2][v1] = value;
numedge++;
}
// 返回节点个数
public int getNumnode(){
return nodelist.size();
}
// 返回边的数量
public int getNumedge(){
return numedge;
}
// 返回节点i对应的数据
public String getnode(int i){
return nodelist.get(i);
}
// 返回v1,v2对应的value
public int getvalue(int v1,int v2){
return matrix[v1][v2];
}
// 显示图
// 循环打印一维数组即可
public void showgraph(){
for (int[] arr:matrix) {
System.out.println(Arrays.toString(arr));
}
}
}
//测试
public class MyJava {
public static void main(String[] args) {
// 初始化结点个数
Graph graph=new Graph(5);
// 添加节点
graph.insertnode("A");
graph.insertnode("B");
graph.insertnode("C");
graph.insertnode("D");
graph.insertnode("E");
// 添加边
// 连接关系为A-B,A-C,B-D,B-E,注意是双向的
// 其他的连接都是0
graph.insertedge(0,1,1);
graph.insertedge(0,2,1);
graph.insertedge(1,2,1);
graph.insertedge(1,3,1);
graph.insertedge(1,4,1);
// 显示图
System.out.println("图矩阵如下:");
graph.showgraph();
// 返回节点的个数
System.out.println("节点个数:"+graph.getNumnode());
// 返回边的个数
System.out.println("边个数:"+graph.getNumedge());
// 返回节点i对应的数据
System.out.println("节点集合中索引0处的节点:"+graph.getnode(0));
// 返回v1,v2对应的value
System.out.println("矩阵中,索引(1,0)处的值:"+graph.getvalue(1,0));
}
}
结果: