**

利用Java语言写的校园导游系统

**

这个是主要利用了迪杰斯特拉算法写成的,有增加路径,景点等操作。

由于这个地图是用Java中的io流来读取的,因此需要写一个文件。

文件格式如下:

注意:

要记得在GraphMain.java这个文件155行中及时修改你这个文件的路径

代码如下:

Graph.java

public class Graph {VertexType[] vexs = new VertexType[20];     //定义20个顶点(地图上的20个位置)int [][] arcs = new int[20][20];           //用来存取权值(地图上两个地点之间的距离)int vexnum,arcnum;                            //图的当前点数和边数}

VertexType.java

//顶点结构
public class VertexType {String name;   //定义顶点的名字(地图某一点的名字)String info; //定义顶点的描述(地图某一点的描述)public VertexType(){}public VertexType(String name, String info){this.name = name;this.info = info;}
}

GraphMain.java

package Graph;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;public class GraphMain {private static final int MaxInt = 22222;private static Scanner input = new Scanner(System.in);public static void main(String[] args) {//生成一个地图对象Graph graph = new Graph();//建立地图createUDN(graph);printf("********************欢迎来到XX大学*********************");printf("*                                                    *");printf("*             1.查询景点信息                          *");printf("*             2.问路查询                              *");printf("*             3.修改已有景点的相关信息                 *");printf("*             4.增加一个新景点及相关信息              *");printf("*             5.增加一条新的路径                      *");printf("*             6.删除一个景点及其相关信息               *");printf("*             7.删除一个路径                          *");printf("*             8.退出                                  *");printf("*                                                     *");printf("********************XX大学导游系统*********************");while(true){printf("请选择需要的服务(1-6):");int Select = input.nextInt();if(Select == 1){printf("本校景点有:");for(int i = 0; i < graph.vexnum; i ++)printf("             " + (i+1) + "." + graph.vexs[i].name);printf("请选择您要查询的景点" + "(1-" + graph.vexnum + "):");int select = input.nextInt();printf(graph.vexs[select - 1].name + "  " + graph.vexs[select - 1].info);}else if(Select == 2){printf("本校景点有:");for(int i = 0; i < graph.vexnum; i++)printf("             " + (i+1) + "." + graph.vexs[i].name);printf("请输入您的位置" + "(1-" + graph.vexnum + "):");int initialPosition = input.nextInt();printf("请输入您的目的地" + "(1-" + graph.vexnum + "):");int targetPosition = input.nextInt();ShortestPath_DIJ(graph,initialPosition,targetPosition);}else if(Select == 3){printf("请输入您想修改哪个景点的相关信息" + "(1-" + graph.vexnum + "):");int number = input.nextInt();System.out.println("请输入该景点的相关信息:");String message = input.next();if(number < graph.vexnum + 1 && number > 0)graph.vexs[number - 1].info = message;elseprintf("对不起!您输入的标号有误!");}else if(Select == 4){printf("请输入新景点的名字:");String name = input.next();printf("请输入新景点的相关信息:");String info = input.next();graph.vexnum++;graph.vexs[graph.vexnum - 1] = new VertexType(name,info);printf("添加景点成功!");}else if(Select == 5){printf("请输入路径的始点" + "(1-" + graph.vexnum + "):");int initial = input.nextInt();printf("请输入路径的终点"  + "(1-" + graph.vexnum + "):");int destination = input.nextInt();printf("请输入始点和终点的距离:");int distance = input.nextInt();if((0 < initial && initial < graph.vexnum + 1) && (0 < destination && destination < graph.vexnum + 1)){graph.arcs[initial-1][destination-1] = distance;graph.arcs[destination-1][initial-1] = distance;printf("添加路径成功!");}elseprintf("对不起!您输入的位置有误!");}else if(Select == 6){printf("请输入将要删除景点的标号" + "(1-" + graph.vexnum + "):");int number = input.nextInt();//在范围内if(0 < number && number < graph.vexnum + 1){graph.vexs[number - 1] = null;for(int h = number-1; h < graph.vexnum; h++){//把景点删除graph.vexs[h] = graph.vexs[h + 1];}for(int w = number - 1; w < graph.vexnum; w++)for(int j = 0; j < graph.arcs[w].length; j++){//把路径删除graph.arcs[w][j] = graph.arcs[w + 1][j];graph.arcs[j][w] = graph.arcs[j][w+1];}graph.vexnum--;printf("删除景点完毕!");}elseprintf("对不起!您输入的标号有误!");}else if(Select == 7){printf("请输入将要删除路径的始点标号" + "(1-" + graph.vexnum + "):");int initial = input.nextInt();printf("请输入将要删除路径的终点标号" + "(1-" + graph.vexnum + "):");int destination = input.nextInt();if((0 < initial && initial < graph.vexnum + 1) && (0 < destination && destination < graph.vexnum + 1)){graph.arcs[initial-1][destination-1] = MaxInt;graph.arcs[destination-1][initial-1] = MaxInt;printf("删除路径完毕!");}elseprintf("对不起!您输入的标号有误!");}else if(Select == 8){printf("谢谢您的使用!欢迎下次再来!");break;}elseprintf("对不起,输入有误!请重新输入!");}}public static void printf(Object o){System.out.println(o);}public static void createUDN(Graph graph){try{String encoding="utf-8";//这个路径要及时修改!!!File file=new File("C:/Users/Lenovo/Desktop/Graph.txt");//判断文件是否存在if(file.isFile() && file.exists()){//考虑到编码格式,这里用到utf-8,中文字符更多。//将字节流输入流转换成字符输入流InputStreamReader read = new InputStreamReader(new FileInputStream(file),encoding);//将字符输入流转换成带缓冲区的字符输入流BufferedReader bufferedReader = new BufferedReader(read);String lineTxt = null;int i = 1;int e,f;while((lineTxt = bufferedReader.readLine()) != null){String[] a = lineTxt.split(" ");if(i == 1){graph.vexnum = Integer.parseInt(a[0]);graph.arcnum = Integer.parseInt(a[1]);}if(1 < i && i <= (graph.vexnum + 1)){graph.vexs[i-2] = new VertexType(a[0],a[1]);}if(i <= (graph.arcnum + graph.vexnum + 1) && i > (graph.vexnum + 1)){e = LocateVex(graph,a[0]);f = LocateVex(graph,a[1]);graph.arcs[e][f] = Integer.parseInt(a[2]);graph.arcs[f][e] = Integer.parseInt(a[2]);}i++;}//关闭文件,关闭了read,其他也都关闭了read.close();for(int h = 0; h < graph.arcs.length; h++)for(int j = 0; j < graph.arcs[h].length; j++)if(h != j && graph.arcs[h][j] == 0)graph.arcs[h][j] = MaxInt;}}catch(Exception e){printf(e.getMessage());}}//查找顶点的位置public static int LocateVex(Graph graph,String name){for(int i = 0; i < graph.vexnum; i++)if(name.equals(graph.vexs[i].name))return i;return -1;}public static void ShortestPath_DIJ(Graph graph,int v0,int v1){int n = graph.vexnum;           //先把地图的位置顶点用n来表示boolean [] S = new boolean[n]; //每执行一次循环找出最小路径,如果找出一个最小路径就把该点置为trueint [] D = new int[n];          //存权值(最小的),如果有更小的将会代替该位置上大的权值int [] Path = new int[n];     //记录该索引顶点的前驱顶点//初始化,先找出v0结点的邻居结点的各个权值for(int i = 0; i < n; i ++){S[i] = false;               //S中先都置为falseD[i] = graph.arcs[v0 -1][i];  //最开始先把v0与其他几个顶点的权值赋值给D[i]if(D[i] != MaxInt && D[i] != 0)Path[i] = v0 - 1;           //第i个顶点的前驱结点就是v0,表示i和v0相邻elsePath[i] = -1;         //表示i顶点和v0顶点没有相邻,如果相邻必有权值不为无穷大}S[v0 - 1] = true;                   //v0与v0之间路径为0,我们不再讨论int v = - 1;//对剩下的n-1个顶点循环。for(int i = 1; i < n; i++){int m = MaxInt;//找出D中最小的路径for(int w = 0; w < n; w++)if(!S[w] && D[w] < m){m = D[w];          //依次比较D中的权值,找出最小的权值v = w;           //把这个最小权值的位置赋值给v(记录下来)}if(v != -1)             //表示我们找到了D中的最小路径{S[v] = true;      //我们找到了最小路径,我们把它置为true,以防下次还找到它for(int w = 0; w < n; w++)if(!S[w] && D[v] + graph.arcs[v][w] < D[w])      //如果原来的路径D[w](0-n)依次和v0到v的权值再加上v到w的权值进行比较{D[w] = D[v] + graph.arcs[v][w];             //如果小于了,等于说有最优路径,我们把最优路径赋值给D[w]Path[w] = v;                             //并把w的前驱置为v}}           }int [] a = new int[n];for(int i = 0; i < Path.length; i++){a[i] = -1;if(Path[v1 - 1] == v0 - 1){continue;}else{a[i] = Path[v1 - 1];if(Path[v1 - 1] != -1)Path[v1 - 1] = Path[Path[v1 - 1]];}}if(D[v1 - 1] != MaxInt){System.out.print("路径是:" + graph.vexs[v0 - 1].name);for(int i = a.length - 1; i >= 0; i --){if(a[i] != -1){System.out.print("->" + graph.vexs[a[i]].name);}}System.out.print("->" + graph.vexs[v1 - 1].name + "\n");printf("最短距离为:" + D[v1 - 1]);}elseprintf("对不起!两者不连通!");}
}

校园导游系统(Java语言)相关推荐

  1. 校园导游系统c语言代码,GitHub - iamywang/Campus-Guide-System: 校园导游系统

    校园导游系统 Qt5 图形界面版本 v2.1.5 更新内容 2019.2.25 Version 2.1.5 新增道路信息查询功能,输入道路起点和终点即可查询道路具体信息 新增范例地图,支持一键录入已有 ...

  2. 校园导游系统_C语言实现_Dijkstra(迪杰斯特拉算法)_数据结构

    西京学院导游系统 摘要   要完成对整个导游图系统的功能实现,需要对每一项功能都有清楚的设想和认识,了解并明确每一项功能的实现和需要解决的问题,选择正确并且高效的算法把问题逐个解决,最终实现程序的正确 ...

  3. 校园导游java版,校园导游系统Word版

    <校园导游系统Word版>由会员分享,可在线阅读,更多相关<校园导游系统Word版(20页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有帮助,可双击 ...

  4. java校院导游程序课程设计_数据结构课程设计之校园导游系统

    数据结构课程设计之校园导游系统 放假到现在终于安下心来要搞点学习了,现在对放假前一周的数据结构课设做一个总结,快放假的时候搞数据结构课设,当时满脑子都是期末考试忙着复习,根本没啥心思去做.所以课设一共 ...

  5. Java课程设计:校园导游系统

    校园导游系统 内容目录: 设计要求 功能模块分析 数据库设计 数据库连接 数据库功能的实现 gui的实现 内容目录: 1. 设计要求 2. 功能分析 设计要求 图形化界面(GUI),编写一个文本文件信 ...

  6. c语言数据结构校园导游系统,校园导游系统课程设计报告

    校园导游系统课程设计报告 目录 1.需求分析1 2.总体设计1 2.1 抽象数据类型图的定义1 2.2 程序中包含的模块1 2.3模块间的调用关系3 3.详细设计3 3.1 代码设计3 3.1.1 定 ...

  7. c语言 校园导游系统,校园导游系统

    <校园导游系统>由会员分享,可在线阅读,更多相关<校园导游系统(9页珍藏版)>请在人人文库网上搜索. 1.校园导游系统问题说明设计为来访客人提供多种信息查询服务的校园导游计划基 ...

  8. java校院导游程序课程设计_校园导游系统 数据结构课程设计(有源程序)

    内容介绍 原文档由会员 莎士比亚 发布 论文标准WORD格式排版 附源程序 海南大学校园导游系统 一. 意义 此程序可以作为庞大的旅游信息查询系统的一个子程序. 二. 程序设计思想 1. 从海南大学的 ...

  9. 校园导游系统数据结构课程设计(附完整代码)

    1 问题内容与目的要求 1.1 算法产生的背景: Floyd 算法又称为加点法.插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法.该算法名称以创始人之一.1978 年图灵奖获 ...

最新文章

  1. JGG:中大骆观正组开发微量样品m(6)A测序新技术
  2. 基于JDK 1.8 的 Java 容器UML图
  3. 淘宝——移动端页面终端适配
  4. 每日两SQL(6),欢迎交流~
  5. Python爬虫进阶三之Scrapy框架安装配置
  6. java去除重复对象_Java19-2 集合类去除重复对象
  7. Flutter CupertinoSliverRefreshControl 苹果风格的刷新效果
  8. (6)css常用样式属性--文字样式
  9. jmeter 加密解密_AES加密的安全问题
  10. 人工智能作业考试汇总
  11. 2.5维数字地图制作
  12. otc焊接机器人编程模拟软件_OTC机器人编程
  13. 逻辑回归之ROC曲线的绘制
  14. 新一代超低功耗STM32U5,到底有啥亮点?
  15. 【React】入门实例
  16. 第五十九章 CSP的常见问题 - 会话和许可证,为什么我要经常登录?
  17. Android studio右侧Gradle窗口显示 nothing to show
  18. CentOS8配置自己的yum软件仓库
  19. 如何处理常见的并发编程缺陷?
  20. 《影响力》第四章:社会认同

热门文章

  1. C#SendMessage用法
  2. Tomcat下载安装及配置(全网最新详细教程)
  3. CPU性能优化:Cache
  4. 旅游推荐平台|酒店推荐平台|基于协同过滤算法实现旅游酒店推荐系统
  5. 控件拖动后,某些事件引起的布局重置或位置还原问题
  6. ubuntu服务器修改root密码
  7. 自媒体视频改帧数消重软件 修改视频的md5
  8. 头歌实训项目【学生信息转换】
  9. python画原型图,Digraph 安装采坑
  10. 提升团队60%的效能的接口利器,前后端、测试都能用,leader们建议进来看看