校园导航系统 数据结构

校园导航系统主要功能设计存储结构设计详细设计主程序设计//本人第一次发博客,有什么不对的地方,还请谅解主要功能设计1.图的初始化由函数init()实现2.学校景点介绍-简单循环输出3.查看浏览路线迪杰斯特拉算法实现4.查看两景点之间的最短路径弗洛伊德算法实现5.景点信息查询对应输出6.更改图信息图的基本操作7.打印邻接矩阵...
摘要由CSDN通过智能技术生成


//本人第一次发博客,有什么不对的地方,还请谅解

主要功能设计

1.图的初始化 由函数init()实现
2.学校景点介绍- 简单循环输出
3.查看浏览路线 迪杰斯特拉算法实现
4.查看两景点之间的最短路径 弗洛伊德算法实现
5.景点信息查询 对应输出
6.更改图信息 图的基本操作
7.打印邻接矩阵 输出邻接矩阵的值
8.退出 退出系统

存储结构设计

class Vexsinfo {
   
        public int ID;
		public String name;
		public String  introduction;
		public boolean isVisited;
		public Vexsinfo(int id,String name, String a)
		{
   
			this.ID=id;
			this.name=name;
			this.introduction=a;
			this.isVisited=false;
		}
	}
	class MGraph/*图结构信息,邻接矩阵表示*/ {
   
	public Vexsinfo[]vexs;/*顶点信息*/
	public int [][]arcs;/*邻接矩阵,用整型值表示权值*/
	public int arcNum;/*边数*/
	public int vexNum;/*顶点数*/
	public MGraph(int maxVexsNum,int maxsize) {
   
		this.vexs=new Vexsinfo[maxVexsNum];
		this.arcs=new int[maxsize][maxsize];
		this.arcNum=maxVexsNum;
		this.vexNum=maxsize;
        init();
	}
	}

详细设计

/*显示景点所有信息景点*/
	public void introduceCompus()/*1.校园简介,显示各地点的编号`名称和简介*/
	   {
   
		System.out.format("\n\n%-6s%-30s%s\n","编号","景点名称","简介");
		System.out.print("                   \n");
		for(int i=0;i<this.vexNum;i++)
		System.out.format("%-6d%-30s%s\n",this.vexs[i].ID,this.vexs[i].name,this.vexs[i].introduction);
		System.out.print("                    \n");
					
        }
	/*查看浏览线路  */
	public void browsePath()/*显示从给定景点出发,到其他景点的最短路径 */
	    {
   
		/*迪杰斯特拉算法,求从顶点v0到其余顶点的最短路径p[][]及其带权长度d[v](最短路径的距离)  
		 * P[][]数组用于存放两顶点间是否有通路标志。若p[v][w]==1,则w是从v0到v的最短路径上的顶点*/
		int min,t=0,v0;  //v0为起始景点编号
		int []d=new int[35];
		int [][]p=new int[35][35];
		System.out.print("\n请输入一个起始景点编号");
		Scanner sc=new Scanner(System.in);
		v0=sc.nextInt();
		System.out.print("\n\n");
		while(v0<0||v0>this.vexNum)
		{
   
			System.out.print("\n你所输入的景点编号不存在");
			System.out.print("\n请重新输入");
			v0=sc.nextInt();
		}
		for(int v=0;v<this.vexNum;v++)
		{
   
			this.vexs[v].isVisited=false;  //初始化各顶点访问标志
			d[v]=this.arcs[v0][v];   //v0到各顶点v的权值赋值给d[v]
			/*初始化p[][]数组,各顶点间的路径全部设置为空路径0*/
			for(int w=0;w<this.vexNum;w++)
				p[v][w]=0;
			if(d[v]<1000)  //v0到v有边相连,修改p[v][v0]的值为1
			{
   
				p[v][v0]=1;
				p[v][v]=1; //各顶点自己到自己要连通
			}
		}
		d[v0]=0; //自己到自己的权值为0
		this.vexs[v0].isVisited=true; //v0的访问标志设为true,v属于s集
		/*对其余vexNum-1个顶点w,依次求v到w的最短路径*/
		for(int i=1;i<this.vexNum;i++)
		{
    
			min=1000;
			/*在未被访问的顶点中,查找与v0最近的顶点v*/
			for(int w=0;w<this.vexNum;w++)
				if(!this.vexs[w].isVisited&&d[w]<min)
				{
   
					t=w;
					min=d[w];
				}
				this.vexs[t].isVisited=true;//v的访问标志设置为1,v属于s集
				/*修改v0到其余各顶点w的最短路径权值d[w]*/
				for(int w=0;w<this.vexNum;w++)
					/*若w不属于s,且v到w有边相连*/
					if(!this.vexs[w].isVisited&&(min+this.arcs[t][w]<d[w]))
					{
   
						d[w]=min+this.arcs[t][w];//修改v0到w的权值d[w]
						/*所有v0到vde最短路径上的顶点x,都是v0到w的*/
						for(int x=0;x<this.vexNum;x++)
							p[w][x]=p[t][x];/*最短路径上的顶点*/
						p[w][w]=1;
					}
			}
				for(int v=0;v<this.vexNum;v++)/*输出v0到其他顶点v的最短路径*/
				{
   
					if(v!=v0)
						System.out.print(this.vexs[v0].name);//输出景点v0的景点名
					/*对图中每个顶点w,试探w是否是v0到v的最短路径上的顶点*/
					for(int w=0;w<this.vexNum;w++)
					{
   
						/*若w是,且w不等于v0,则输出该景点*/
						if(p[v][w]==1&&w!=v0&&w!=v)
							System.out.print("--->"+this.vexs[w].name);
					}
					System.out.print("--->"+this.vexs[v].name);
					System.out.print("\t总路线长为"+d[v]+"米\n\n");
				}
	}
		  public void showShortestPath()
				{
   
					/*用floyd算法,求各对顶点v和w间的最短路径p[][][]及其带权长度d[v][w]
					 * 若p[v][w][u]==1,则u是v到w的当前求得的最短路径上的顶点*/
					int j,k;
					int [][]d=new int [23][23];
					int [][][]p1=new int [23][23][23];
					/*初始化各对顶点v,w之间的起始距离d[v][w]及p[v][w][]数组*/
					for(int v=0;v<this.vexNum;v++)
						for(int w=0;w<this.vexNum;w++)
						{
   
  • 12
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
设计你的学校的平面图,至少包括10个以上的景点(场所),每两个景点间可以有不同的路,且路长也可能不同,找出从任意景点到达另一景点的最佳路径(最短路径)。 要求: (1)以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等有关信息。 (2)为来访客人提供图中任意景点相关信息的查询。 (3)为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。 (4)提供图的编辑功能:增加、修改、删除景点;增加、修改、删除道路等。 (5)校园导游图的仿真界面。 8.学生成绩管理系统 学生成绩管理是高等学校教务管理的重要组成部分,主要包括学生注册、考试成绩的录入及修改、成绩的统计分析等等。设计一个系统实现对学生成绩的管理。 要求系统应具有以下基本功能: (1)学生注册登记; (2)增加、删除某一班级的学生; (3)成绩录入:输入学生的考试成绩; 要求采用二叉排序树存放学生成绩,一门课程对应一棵二叉排序树; (4)成绩修改:若输入错误可进行修改; (5)统计分析:对某个班级学生的单科成绩进行统计,求出平均成绩;求出成绩处于指定分数段内的学生人数;求出每个学生一学期各科的平均成绩等; (6)查找:查找某个学生的某门课程成绩,查找某门课程成绩处于指定分数段内的学生名单等等。 (7)打印:打印一个班级学生的单科成绩;打印某一课程成绩处于指定分数段内的学生名单;打印学生在某一学期的成绩报告单。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值