文章目录
一. 结构体定义
1.存储景点信息的结点结构体
定义一个无向图结点node结构体,图中的每个结点代表校园内的一个景点,该结构体中包含该景点的详细信息——String类型的景点名称,int类型的景点代号,String类型的景点简介等。
/*
* 定义一个node类作为存储景点信息的结点
*/
class node{
private int index; //景点代号
private String name; //景点名称
private String jianjie;//景点简介
public node(int index, String name, String jianjie) {
//结点的构造方法
this.index = index;
this.name = name;
this.jianjie = jianjie;
}
public int getIndex() {
return index;
}
public String getName() {
return name;
}
public String getJianjie() {
return jianjie;
}
}
2.无向图结构体
定义一个无向图Graph结构体,私有成员包括存放结点的数组vertex[ ],存放邻接矩阵的数组adj[ ],以及结点个数和边的条数。
/*
*定义一个图结构体来存放无向图网络
*/
class Graph{
private node []vertex; //存放结点信息
private int [][]adj; //存放邻接矩阵
private int vertexnum; //结点个数
private int edgenum; //无向边的数目
public Graph(node[] vertex, int[][] adj,int vertexnum,int edgenum) {
this.vertex = vertex;
this.adj = adj;
this.vertexnum = vertexnum;
this.edgenum = edgenum;
}
public node getVertex(int i) {
return vertex[i];
}
public int getAdj(int i,int j) {
return adj[i][j];
}
public int getVertexnum() {
return vertexnum;
}
public int getEdgenum() {
return edgenum;
}
}
二. 各功能模块
1.菜单模块
用于输出与用户之间交互的菜单界面
void menu(){
System.out.print("\t\t\t ***校园导游咨询***\n");
System.out.print("\t\t\t*****************************\n");
System.out.print("\t\t\t* 1、通过景点代号查询景点信息 *\n");
System.out.print("\t\t\t* 2、查询两景点间的最短路径 *\n");
System.out.print("\t\t\t* 3、查看景点列表 *\n");
System.out.print("\t\t\t* 4、查看菜单 *\n");
System.out.print("\t\t\t* 0、退出系统 *\n");
System.out.print("\t\t\t*****************************\n");
}
2.景点信息查询模块
//通过景点代号查询景点信息
void visit1(Graph G,int i){
System.out.println("景点代号:" + G.getVertex(i).getIndex());
System.out.println("景点名称:" + G.getVertex(i).getName());
System.out.println("景点简介:" + G.getVertex(i).getJianjie());
}
3.查看景点列表模块
//查看景点列表
void spotlist(Graph G){
System.out.println("\t\t\t***********景点列表************ ");
System.out.println("\t\t ------------------------------------------");
for (int i = 1;i <= G.getVertexnum();i++){
System.out.println("\t\t " + G.getVertex(i).getIndex() + "、" + G.getVertex(i).getName());
}
System.out.println("\t\t ------------------------------------------");
}
4.Floyd求任意两结点间最短路径模块
/*
*弗洛伊德算法求图中任意两点间的最短路径
* @param G 无向图网络
* @param [][]A 用于存放图中所有顶点对之间的最短路径长度
* @param [][]P 保存由顶点i到顶点j的最短路径中i的直接后继结点
*/
void Floyd(Graph G,int [][]A,int [][]P){
int i,j,k;
for (i = 1;i <= G.getVertexnum();i++){
for (j = 1;j <&#