数据结构课程设计-校园导游系统-带注释
来源:互联网 发布:原生js写轮播图 编辑:程序博客网 时间:2024/04/28 18:23
一、 课程设计的目的
本实习突出了数据结构加操作的程序设计观点,希望达到熟悉各种存储机构结构的特性,以及如何应用树和图机构解决具体问题的目的。
二、 课程设计内容
设 计 目 的 :
了解数据结构,熟悉图的应用,并利用迪杰斯特拉算法求得2点之间的最短路径。
设计技术参数:
(1)设计你的学校的校园平面图,所含景点不小于10个。以图中的顶点表示学校的各个景点,存放景点名称,代号,简介等信息;以边表示路径,存放路径,存放路径的长度等相关信息。
(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的最短的简单路径。
(3)为来访客人提供图中任意景点的相关信息的查询。
/*********************************************************
*设计题目:校园导游咨询系统
*设计人: 中南林业科技大学 杨海波 http://haibo.shishuo.com
*制导老师:杨卫民,陈超云
*时间: 2005年7月20日
*********************************************************/
/* 程序中用到的库函数所在头文件应用 #include 命令包含进来 */
#include "stdio.h"
#include "math.h"
#include "graphics.h"
#include "conio.h" /*gotoxy*/
#include "bios.h"
/**********************************************************/
/* 定义符号常量 */
#define NULL 0
#define num 20
#define maxdist 10000
/**********************************************************/
/* 定义数据结构*/
typedef struct{
char data[num];
double edges[num][num];
}graph;
/**********************************************************/
/* 定义全局变量 */
int x[num],y[num];
char a[num],ab[num][num];
/**********************************************************/
/*自定义函数原型说明 */
void showmsg(char msg[]); /*逐步显示文字*/
void dijkstra(graph g,int n,int i,int d[num],int p[num]);
void opdijk(int v1,int v0,int n,int d[],int p[]);
void info_welcome();
/**********************************************************/
/*功能:逐步显示文字 */
void showmsg(char msg[]) {
int i=0;
while (msg[i]!=’/0’){
printf("%c",msg[i]);
i++;
delay(30000);
}
}
/**********************************************************/
/*功能:用迪杰思特拉算法求图的最短路径 */
void dijkstra(graph g,int n,int i,int d[num],int p[num]){
int s[num];
double mindist,dist;
int j,k,u,w;
for(j=0;j<n;j++)
{d[j]=g.edges[i][j];
s[j]=0;
if((d[j]<maxdist)&&(d[j]!=0))
p[j]=i; /*可到达的路径*/
else
p[j]=-1; /*设空路径*/
}
s[i]=1;
for(j=0;j<n-1;j++)
{mindist=maxdist;
u=i;
for(k=0;k<n;k++)
if((s[k]==0)&&(d[k]<mindist))
{u=k;
mindist=d[k];
}
s[u]=1;
for(k=0;k<n;k++)
{if(s[k]==0)
{dist=d[u]+g.edges[u][k];
if(dist<d[k])
{d[k]=dist;
p[k]=u;
}
}
}
}
}
/**********************************************************/
/*功能:打印出图的最短路径 */
void opdijk(int v1,int v0,int n,int d[],int p[]){
int i,i_1,j,k,pre;
int point_x,point_y;
for(i=0;i<n;i++)
if(i!=v0&&i==v1){
gotoxy(5,24);
printf("%c",a[i]);
point_x=x[i];
point_y=y[i];
pre=p[i];
while(pre!=-1){
setcolor(RED);
/**********************************/
/**闪烁终点的颜色 */
for (i_1=0;i_1<10 ;i_1++ )
{
setcolor(GREEN);
circle(x[pre]*30,y[pre]*30,3);
delay(90000);
setcolor(RED);
circle(x[pre]*30,y[pre]*30,3);
delay(90000);
setcolor(GREEN);
line(point_x*30,point_y*30,x[pre]*30,y[pre]*30);
delay(90000);
setcolor(RED);
line(point_x*30,point_y*30,x[pre]*30,y[pre]*30);
delay(90000);
}
/**********************************/
point_x=x[pre];
point_y=y[pre];
printf("-->%c",a[pre]);/****************************/
pre=p[pre];
}
if(d[i]==maxdist)
/*line(point_x*30,point_y*30,x[v0]*30,y[v0]*30);*/
printf("-->%c",a[v0]);
/*printf("/tshortestway:%5f",d[i]);*/
}
}
/******************************************************/
/*功能:打印出程序的帮助和欢迎信息 */
void info_welcome(){
int i,j;
char *Msg[]=
{
"Welcome to CSFU! ",
" ",
"ADDRESS:Central South ",
"Forestry University ",
"Changsha,Hunan,China ",
" ",
"TEL:+86-731-5623172 ",
"",
"",
" [HELP] ",
"Find OUT THE SHORTEST ",
"PATH:F or f ",
"",
"EXIT:Q or q ",
NULL,
};
/*显示操作键说明 */
i=0;
textcolor(WHITE);
delay(90000);
while(Msg[i]!=NULL)
{
gotoxy(56,3+i);
printf(Msg[i]);
i++;
}
printf("/n/n/n");
textcolor(GREEN);
gotoxy(5,18);
i=0;
showmsg("Welcome to use school_wizard.");
gotoxy(5,20);
showmsg("You can choose ’F’ or ’Q’:");
}
/***************************************************/
/*功能: */
main(){
graph g;
int i,j,k,n,m,i_1,i_2,i_3;
int driver,mode;
int road_x,road_y;
char nu,b,i_str,m_str;
int d[num],p[num],sd[num][num],sp[num][num];
FILE *map_f,*road_f;
clrscr();
/*初始化变量 g.edges[][]*/
for (i_1=0;i_1<num;i_1++){
for (i_2=0;i_2<num;i_2++){
g.edges[i_1][i_2]=maxdist;
}
}
/*********************************************************/
/*读取文件 map.dat(园地图的景点)&&描绘校园地图的路径 */
if ((map_f=fopen("map.dat","r"))==0){
printf("Can not open the file of map.dat./n");
exit(1);
}
fscanf(map_f,"%d",&n);
for(i=0;i<n;i++){
fscanf(map_f,"%d",&nu);
fscanf(map_f,"%d",&nu);
fscanf(map_f,"%d",&nu);
fscanf(map_f,"%c",&a[i]);
fscanf(map_f,"%d",&x[i]);
fscanf(map_f,"%d",&y[i]);
}
fclose(map_f);
/*********************************************************/
/*在屏幕上描绘校园地图的景点 */
loop: driver=VGA,mode=VGAHI;
initgraph(&driver,&mode,"");
setbkcolor(BLUE);
for(i=0;i<n;i++){
setfillstyle(1,62);
circle(x[i]*30,y[i]*30,3);
floodfill(x[i]*30,y[i]*30,WHITE);
gotoxy(x[i]*4+2,y[i]*2);
printf("%c",a[i]);
/*printf("a[%d]=%c/nx[%d]=%d/ty[%d]=%d/n",i,a[i],i,x[i],i,y[i]); /*调试校园地图的景点*/
}
setcolor(BROWN);
rectangle(3,3,n*30+100,(n-2)*30);
rectangle(n*30+100,3,getmaxx()-3,(n-2)*30);
/*printf("n=%d/n",n);
/*********************************************************/
/*调用其他函数 */
info_welcome();
/***********************************************************/
/*读取文件 road.dat(园地图的路径) */
for(i=0;i<n;i++)
for(j=0;j<n;j++)
g.edges[i][j]=maxdist;
if ((road_f=fopen("road.dat","r"))==0){
printf("Can not open the file of road.dat./n");
exit(1);
}
fscanf(road_f,"%c",&b);
for(i=0;i<n;i++){
/*printf("/n%c",b);*/
if (b==’@’){
fscanf(road_f,"%c",&b);
/*printf("/n%c",b);*/
ab[i][0]=b;
for (i_1=0;i_1<n;i_1++){
if (b==a[i_1]){
/*road_x=x[i_1];
road_y=y[i_1];*/
break;
/*printf("/n1 %c,%d,%d",a[i_1],road_x,road_y);*/
}
if (b==’@’){
break;
}
}
for (i_2=0;i_2<num;i_2++){
fscanf(road_f,"%c",&b);
for (i_3=0;i_3<n;i_3++){
if (b==a[i_3]){
ab[i][i_2+1]=b;
setcolor(WHITE);
line(x[i_1]*30,y[i_1]*30,x[i_3]*30,y[i_3]*30);
/**********************************************************/
g.edges[i_1][i_3]=hypot((double)(x[i_1]-x[i_3]),(double)(y[i_1]-y[i_3]));
/**********************************************************/
/*printf("/n2 %d,%d %c,%d,%d",road_x,road_y,a[i_3],x[i_3],y[i_3]);*/
}
if (b==’@’){
break;
}
}
if (b==’@’){
break;
}
}
} else {
for (i_2=0;i_2<num;i_2++){
if (b==’@’){
break;
}
}
}
}
fclose(road_f);
/*********************************************************/
/*clrscr();*/
/*
for (i_1=0;i_1<num;i_1++){
printf("/n");
for (i_2=0;i_2<num;i_2++){
printf("%3f ",g.edges[i_1][i_2]);
}
}
*/
/*
for (i_1=0;i_1<num;i_1++){
printf("/t");
printf("%d,%d ",x[i_1],y[i_1]);
}
*/
/*********************************************************/
/*循环等待用户输入 */
do{
switch(toupper(getchar())) {
case’Q’:exit(0);
case’F’:{
getchar();
gotoxy(100,n);
/*
for (i_1=0;i_1<n;i_1++){
printf("a[%d]=%c/n",i_1,a[i_1]);
}
*/
gotoxy(5,21);
showmsg("Where are you NOW?:");
/*scanf("%d",&m);*/
scanf("%c",&m_str);
getchar();
for (i_1=0;i_1<n;i_1++){
if (toupper(m_str)==a[i_1]){
m=i_1;
}
}
/**********************************/
/**闪烁源点的颜色 */
for (i_1=0;i_1<10 ;i_1++ )
{
setcolor(GREEN);
circle(x[m]*30,y[m]*30,3);
delay(90000);
setcolor(RED);
circle(x[m]*30,y[m]*30,3);
delay(90000);
}
/*********************************/
gotoxy(5,22);
showmsg("Where are you GO?:");
/*scanf("%d",&i);*/
scanf("%c",&i_str);
getchar();
for (i_1=0;i_1<n;i_1++){
if (toupper(i_str)==a[i_1]){
i=i_1;
}
}
/**********************************/
/**闪烁终点的颜色 */
for (i_1=0;i_1<10 ;i_1++ )
{
setcolor(GREEN);
circle(x[i]*30,y[i]*30,3);
delay(90000);
setcolor(RED);
circle(x[i]*30,y[i]*30,3);
delay(90000);
}
/*********************************/
gotoxy(5,23);
printf("The shortest path FROM %c TO %c is :",a[i],a[m]);
dijkstra(g,n,i,d,p);
opdijk(m,i,n,d,p);
printf("/n/n/n");
system("pause");
clrscr();
goto loop;
break;
}
}
;
}while(1);
}
附件:
文件名: map.dat (用TAB键隔开)
11
A 10 6
B 8 4
C 5 1
D 5 3
E 5 5
F 5 6
G 5 7
H 4 6
I 2 4
J 1 4
K 1 8
map.dat文件数据
map.dat文件的解释
11
A 10 6
B 8 4
C 5 1
D 5 3
E 5 5
F 5 6
G 5 7
H 4 6
I 2 4
J 1 4
K 1 8
总共有多少个景点
A X坐标 Y坐标
B X坐标 Y坐标
C X坐标 Y坐标
D X坐标 Y坐标
E X坐标 Y坐标
F X坐标 Y坐标
G X坐标 Y坐标
H X坐标 Y坐标
I X坐标 Y坐标
J X坐标 Y坐标
K X坐标 Y坐标
文件名:road.dat
@AEBFG
@BCDEA
@CDB
@DCEB
@EDIHFAB
@FEHGA
@GFHKA
@HIKGFE
@IJHDC
@JKI
@KJGH
附件下载
- 数据结构课程设计-校园导游系统-带注释
- 校园导游系统 数据结构课程设计
- 数据结构课程设计校园导游(吃货版)
- {数据结构课程设计}校园导游的多功能实现
- 校园导游咨询——数据结构课程设计
- 数据结构-校园导游咨询系统
- 数据结构项目-校园导游系统
- 课程设计校园导游
- 数据结构-校园导游咨询系统…
- 【数据结构课设】校园导游系统
- 数据结构课程设计———烟台大学导游系统
- 校园导游咨询系统
- 校园导游系统
- 小型校园导游系统
- 校园导游系统
- 校园交通导游系统
- 数据结构课程设计-公园导游图
- C项目-校园导游系统
- [转] 国内软件破解下载网站列表!
- log4j使用示例
- web2.0中流行的设计元素:颜色
- GDI+实例教程之: 转换Image(BMP,JPG,GIF,PNG等) 到MetaFile(EMF等) 格式
- jsp wiki的基本使用
- 数据结构课程设计-校园导游系统-带注释
- 半梦半醒之间
- 静态类实现窗体之间的数据传递
- ~~设计师的助手,值得收藏!~~
- 1分钟学会GCC
- web默认站点启动不了
- makefile编写入门
- 试试你的【杀毒】软件----级别鉴定
- Delphi的文本文件操作类源码