数据结构实践项目之校园导航系统
来源:互联网 发布:网络砍价师 编辑:程序博客网 时间:2024/04/27 20:56
/* *Copyright (c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者:王敏 *完成日期:2015年12月24日 *版本号:v1.0 * *问题描述:创建一个校园导航系统,能进行简单的景点间最短距离的查询及景点的介绍
1.将程序用多文件组织的形式保存
2.讲景点信息存入文本文件*输入描述:要进行的功能序号*程序输出: 执行的相应功能*/
map.h
#include<stdio.h>#include<stdlib.h>//调用system函数#include<conio.h>#include<string.h>#define maxsize 600#define INF 32767//两景点不可到距离长度int visited[maxsize];//全局变量int path[maxsize][maxsize];//经过景点int shortest[maxsize][maxsize];//最短路径typedef struct//定义对各个景点信息存储的结构体类型{ int top;//景点序号 char info[maxsize];//景点名称 char introduce[maxsize];//景点介绍} data;//定义顶点类型typedef struct node{ int adj;//相邻接的景点间的距离} node;//定义边的类型typedef struct{ data vertex[maxsize];//景点、顶点 node arcs[maxsize][maxsize];//景点间距离 int vexnum,arcnum;//景点数、边数} adjmatrix;//定义图的类型void Browser();/*校园地图*/void PlaceList();/*已存景点阅览*/void creatvisited(adjmatrix *g);/*访问标志数组初始化*/void DFS(adjmatrix *g,int v);/*深度遍历*/void search(adjmatrix *g);/*遍历*/void vernumfile(adjmatrix *g);/*已存景点信息文本*/void arcnumfile(adjmatrix *g);/*已存景点间路径文本*/void readvernum(adjmatrix *g);/*读取景点信息*/void readarcnum(adjmatrix *g);/*读取路径信息*/void findvernum(adjmatrix *g);/*查询景点信息*/void floyd(adjmatrix *g);/*弗洛伊德算法*/void shortload(adjmatrix *g);/*最短路径*/int meun();/*菜单栏*/
map.c
#include"map.h"/*校园地图*/void Browser(){ system ("color 00"); printf(" 烟台大学校园平面图"); printf("\n"); printf(" 南门 "); printf("\n"); printf(" // || \\ \\ "); printf("\n"); printf(" // || \\ \\ "); printf("\n"); printf(" // 逸夫图书馆===综合楼======大学生活动中心"); printf("\n"); printf(" // || "); printf("\n"); printf("// || "); printf("\n"); printf("千米长廊 || "); printf("\n"); printf(" \\ || "); printf("\n"); printf(" 三元湖 "); printf("\n"); printf(" || "); printf("\n"); printf(" || "); printf("\n"); printf(" 承先图书馆=====钟楼=====操场 "); printf("\n"); printf(" \\ \\ // "); printf("\n"); printf(" \\ \\ // "); printf("\n"); printf(" \\ \\ // "); printf("\n"); printf(" 小树林 "); printf("\n"); printf(" // "); printf("\n"); printf(" // "); printf("\n"); printf(" 东门海边 ");}/*已存景点阅览*/void PlaceList(){ system ("color 00"); printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); printf("\t\t┃已存文件景点一览表 ┃\n"); printf("\t\t┣━━━━━━━━━━━━┳━━━━━━━━━━━━┫\n"); printf("\t\t┃1.逸夫图书馆 ┃2.综合楼 ┃\n"); printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n"); printf("\t\t┃3.千米长廊 ┃4.大学生活动中心 ┃\n"); printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n"); printf("\t\t┃5.三元湖 ┃6.钟楼 ┃\n"); printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n"); printf("\t\t┃7.承先图书馆 ┃8.小树林 ┃\n"); printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n"); printf("\t\t┃9.操场 ┃10.东门 ┃\n"); printf("\t\t┗━━━━━━━━━━━━┻━━━━━━━━━━━━┛\n");}/*访问标志数组初始化*/void creatvisited(adjmatrix *g){ int i; for(i=0; i<g->vexnum; i++) visited[i]=0;}/*遍历*/void search(adjmatrix *g){ int i,n; creatvisited(g); for(i=0; i<g->vexnum; i++) printf("%d\t%s\n",g->vertex[i].top,g->vertex[i].info); printf("请输入遍历的起点序号:(1-%d)\n",g->vexnum); scanf("%d",&n); DFS(g,n-1);}/*深度遍历*/void DFS(adjmatrix *g,int v){ int k; visited[v]=1;//置已访问标记 printf("景点序号:%d 名称:%s\n",g->vertex[v].top,g->vertex[v].info); for(k=0; k<g->vexnum; k++) if(!visited[k]&&g->arcs[v][k].adj!=INF) DFS(g,k);}/*已存景点信息文本*/void vernumfile(adjmatrix *g){ FILE *fp; int i; fp=fopen("vernum.txt","wt"); for(i=0; i<g->vexnum; i++) fprintf(fp,"%d %s %s\n",g->vertex[i].top,g->vertex[i].info,g->vertex[i].introduce); fclose(fp);}/*已存景点间路径文本*/void arcnumfile(adjmatrix *g){ FILE *fp; int i,j; fp=fopen("arcnum.txt","wt"); for(i=0; i<g->arcnum; i++) for(j=0; j<g->arcnum; j++) if(g->arcs[i][j].adj!=INF) { fprintf(fp,"%d %d %d\n",g->vertex[i].top,g->vertex[j].top,g->arcs[i][j].adj); } fclose(fp);}/*读取景点信息*/void readvernum(adjmatrix *g){ FILE *fp; int i=0; fp=fopen("vernum.txt","rt"); while(fscanf(fp,"%d %s %s",&g->vertex[i].top,g->vertex[i].info,g->vertex[i].introduce)!=EOF) { printf("景点序号:%d 名称:%s\n",g->vertex[i].top,g->vertex[i].info); printf("景点信息:%s\n",g->vertex[i].introduce); printf("\n"); i++; } g->vexnum=i; fclose(fp);}/*读取路径信息*/void readarcnum(adjmatrix *g){ FILE *fp; int i=0,j=0,k=0; for(i = 0; i<g->vexnum; i++) for(j = 0; j<g->vexnum; j++) g->arcs[i][j].adj =INF; fp=fopen("arcnum.txt","rt"); while(fscanf(fp,"%d %d %d",&i,&j,&k)!=EOF) { g->arcs[i-1][j-1].adj=k; } fclose(fp);}/* 读取景点信息*/void findvernum(adjmatrix *g){ int i,n; char choice; for(i=0; i<g->vexnum; i++) printf("%d\t%s\n",g->vertex[i].top,g->vertex[i].info); do { printf("请输入要查询的景点序号(1-%d):\n",g->vexnum); scanf("%d",&n); printf("景点名称:%s\n",g->vertex[n-1].info); printf("景点信息:%s\n",g->vertex[n-1].introduce); printf("\n"); printf("是否继续查询:(y/n):\n"); _flushall(); scanf("%c",&choice); } while(choice=='Y'||choice=='y');}/*弗洛伊德算法*/void floyd(adjmatrix *g){ int i,j,k; for(i=0; i<g->vexnum; i++) for(j=0; j<g->vexnum; j++) shortest[i][j]=0; for(i=0; i<g->vexnum; i++) for(j=0; j<g->vexnum; j++) { shortest[i][j]=g->arcs[i][j].adj; path[i][j]=0; } for(i=0; i<g->vexnum; i++) for(j=0; j<g->vexnum; j++) for(k=0; k<g->vexnum; k++) if(shortest[i][j]>(shortest[i][k]+shortest[k][j])) { shortest[i][j]=shortest[i][k]+shortest[k][j]; path[i][j]=k; path[j][i]=k; }}/*最短路径*/void shortload(adjmatrix *g){int i,j,a,b;PlaceList();floyd(g);printf("请输入起始景点和终止景点(1-%d):\n",g->vexnum);scanf("%d%d",&i,&j);a=i;b=j;i=i-1;j=j-1;if(i<j){printf("%d",b);while(path[i][j]!=0){ printf("<-%d",path[i][j]+1);if(i<j)j=path[i][j];elsei=path[j][i];}printf("<-%d",a);printf("\n\n");printf("%d->%d 距离是:%d米\n\n",a,b,shortest[a-1][b-1]);}else{printf("%d",a);while(path[i][j]!=0){printf("<-%d",path[i][j]+1);if(i<j)j=path[i][j];elsei=path[j][i];}printf("<-%d",b);printf("\n\n");printf("%d->%d 最短距离是:%d米\n\n",a,b,shortest[a-1][b-1]);}}/*菜单栏*/int meun(){ char choice; adjmatrix *g; g=(adjmatrix *)malloc(sizeof(adjmatrix));//创建头结点 system ("color 00"); while(1) { printf("\n"); printf("\t\t************************************************\n"); printf("\t\t***************校园景点导航系统*****************\n"); printf("\t\t*****************欢迎您的使用*******************\n"); printf("\t\t************************************************\n"); printf("\t\t**\t 1: 读取文件信息**\n"); printf("\t\t**\t 2: 遍历景点信息**\n"); printf("\t\t**\t 3: 查询景点信息**\n"); printf("\t\t**\t 4: 查询最短路径**\n"); printf("\t\t**\t 5: 查看景点地图**\n"); printf("\t\t**\t 0: 退出查询系统**\n"); printf("\t\t************************************************\n"); printf("\t\t************************************************\n"); printf("\n"); printf("请选择需要使用的功能序号:"); choice=getchar(); switch(choice) { case '1': { readvernum(g); readarcnum(g); break; } case '2': { search(g); break; } case '3': { findvernum(g); break; } case '4': { shortload(g); break; } case '5': { Browser(g); break; } case '0': { printf("谢谢使用,再见!\n"); exit(0); } } printf("请按任意键继续....."); getch(); _flushall();//清除所有缓冲区 system("cls"); }}
main.c
#include"map.h"/*主函数*/int main(){ meun(); return 0;}
运行结果
1 0
- 数据结构实践项目之校园导航系统
- 初探MFC之校园导航系统
- 数据结构课程设计——校园导航系统开发
- 校园导航系统
- 校园导航系统
- 数据结构课程设计————校园导航系统
- Android项目实践--《智慧校园》
- 数据结构项目-校园导游系统
- Web开发项目实践之校园评教系统功能扩展--初步接触
- Web开发项目实践之校园评教系统功能扩展--熟悉DW网页开发工具
- Campus Guider校园导航系统 Hash算法分析
- 用无向带权图实现校园导航系统
- ARCGis+Google map api 校园地理信息导航系统
- 数据课程设计 -——-校园导航系统
- 校园APP项目之路
- Unity之Navigation导航系统
- 数据结构上机实践项目5
- 导航系统
- 理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
- C#委托最简单的示例!
- 使用defaultdict 内存被爆掉 ,内存溢出,数组太大了
- Objective--C 导航视图控制器
- 尾部的零
- 数据结构实践项目之校园导航系统
- nexus中自定义仓库
- C++数组
- SqlServer与Oracle语法差异
- 基于顺序表的两个非递减有序表的合并
- 数据库连接
- DHT 爬虫的学习记录
- 笔记
- 发布几个PDF小工具