我们的课程设计 校园导航问题

我们的课程设计

 

 

#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define Max 10000
#define NUM 11

typedef struct ArcCell{
int adj;
char *info;
}ArcCell;

typedef struct VertexType{
int number;
char *sight;
}VertexType;

typedef struct{
VertexType vex[NUM]; 
ArcCell arcs[NUM][NUM];
int vexnum,arcnum; 
}MGraph;

MGraph G;
int P[NUM][NUM];
long int D[NUM];
int x[13]={0};
void CreateUDN(int v,int a);
void pingmu();

void ShortestPath(int num);
void output(int sight1,int sight2);
char Menu();

void NextValue(int);

void main() // 主函数
{ int v0,v1;
char ck;

CreateUDN(NUM,11);
do
{
ck=Menu();
switch(ck)
{
case '1':
pingmu();
printf("/n/n/t/t/t请选择出发地序号(1~10):");
scanf("%d",&v0);
printf("/t/t/t请选择目的地序号(1~10):");
scanf("%d",&v1);
ShortestPath(v0);
output(v0,v1);
printf("/n/n/t/t/t/t请按回车键继续.../n");
getchar();
getchar();
break;
case'2':
 printf("本系统由我参考网络上一些内容后编写而成,/n");
 printf("同时由于本系统倾向于理论与现实有所冲突请您见谅,最后感谢您的使用。/n");
 getchar();
getchar();
 break;
};
}while(ck!='e');
}

char Menu() // 主菜单
{
char c;
int flag;
do{
flag=1;
pingmu();
printf("/n/t/t****************************************/n");
printf("/t/t欢迎使用南京信息工程大学导航图系统/n");
printf("/t/t 1.查询景点路径 /n");
printf("/t/t 2.系统简介/n");
printf("/t/t e.退出 /n");
printf("/t/t****************************************/n");
printf("/t/t/t请输入您的选择:");
scanf("%c",&c);
if(c=='1'||c=='2'||c=='e')
flag=0;
}while(flag);
return c;
}

void CreateUDN(int v,int a) // 创建图的函数
{
int i,j;
G.vexnum=v;
G.arcnum=a;
for(i=1;i<G.vexnum;++i) G.vex[i].number=i; 
G.vex[0].sight="各个景点名字";
G.vex[1].sight="学校大门";
G.vex[2].sight="体育馆";
G.vex[3].sight="培训楼";
G.vex[4].sight="行政楼";
G.vex[5].sight="文德楼";
G.vex[6].sight="明德楼";
G.vex[7].sight="尚贤楼";
G.vex[8].sight="食堂";
G.vex[9].sight="宿舍";
G.vex[10].sight="实验楼";
for(i=1;i<G.vexnum;++i)
{
for(j=1;j<G.vexnum;++j)
{
G.arcs[i][j].adj=Max;
G.arcs[i][j].info=NULL;
}
}


G.arcs[1][4].adj=G.arcs[4][1].adj=200;
G.arcs[1][3].adj=G.arcs[3][1].adj=500;
G.arcs[3][5].adj=G.arcs[5][3].adj=100;
G.arcs[3][10].adj=G.arcs[10][3].adj=800;
G.arcs[4][6].adj=G.arcs[6][4].adj=200;
G.arcs[2][5].adj=G.arcs[5][2].adj=200;
G.arcs[2][4].adj=G.arcs[4][2].adj=300;
G.arcs[5][7].adj=G.arcs[7][5].adj=500;
G.arcs[4][6].adj=G.arcs[6][4].adj=400;
G.arcs[4][7].adj=G.arcs[7][4].adj=600;
G.arcs[6][8].adj=G.arcs[8][6].adj=500;
G.arcs[7][8].adj=G.arcs[8][7].adj=300;
G.arcs[6][9].adj=G.arcs[9][6].adj=500;
G.arcs[3][10].adj=G.arcs[10][3].adj=600;
}

void pingmu() // 输出函数
{
int i;
printf("                           南京信息工程大学景点概况/n");
for(i=1;i<NUM;i++)
{
printf("/t/t/t/t(%2d)%-20s/t/t/t",i,G.vex[i].sight);
}
}

void ShortestPath(int num) // 迪杰斯特拉算法最短路径
{
int v,w,i,t;
int final[NUM];
int min;
for(v=1;v<NUM;v++)
{
final[v]=0; 
D[v]=G.arcs[num][v].adj;
for(w=1;w<NUM;w++) 
P[v][w]=0;
if(D[v]<32767)
{
P[v][num]=1;
P[v][v]=1; 
}
}
D[num]=0;
final[num]=1;
for(i=1;i<NUM;++i)
{
min=Max; 
for(w=1;w<NUM;++w)
if(!final[w])
if(D[w]<min)
{
v=w;
min=D[w];
}
final[v]=1; 
for(w=1;w<NUM;++w)
if(!final[w]&&((min+G.arcs[v][w].adj)<D[w]))
{
D[w]=min+G.arcs[v][w].adj;
for(t=0;t<NUM;t++)
P[w][t]=P[v][t];
P[w][w]=1;
}
}
}

void output(int sight1,int sight2) // 输出函数
{
int a,b,c,d,q=0;
a=sight2; 
if(a!=sight1)
{
printf("/n/t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);
printf("/t(最短距离为 %dm.)/n/n/t",D[a]); 
printf("/t%s",G.vex[sight1].sight); 
d=sight1;
for(c=0;c<NUM;++c)
{
gate:;
P[a][sight1]=0;
for(b=0;b<NUM;b++)
{
if(G.arcs[d][b].adj<32767&&P[a][b])
{
printf("-->%s",G.vex[b].sight); 
q=q+1;
P[a][b]=0;
d=b; 
if(q%8==0) printf("/n");
goto gate;
}
}
}
}
}

 

 

参考 http://d.download.csdn.net/down/1732008/ljh86964469

 

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
设计你的学校的平面图,至少包括10个以上的景点(场所),每两个景点间可以有不同的路,且路长也可能不同,找出从任意景点到达另一景点的最佳路径(最短路径)。 要求: (1)以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等有关信息。 (2)为来访客人提供图中任意景点相关信息的查询。 (3)为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。 (4)提供图的编辑功能:增加、修改、删除景点;增加、修改、删除道路等。 (5)校园导游图的仿真界面。 8.学生成绩管理系统 学生成绩管理是高等学校教务管理的重要组成部分,主要包括学生注册、考试成绩的录入及修改、成绩的统计分析等等。设计一个系统实现对学生成绩的管理。 要求系统应具有以下基本功能: (1)学生注册登记; (2)增加、删除某一班级的学生; (3)成绩录入:输入学生的考试成绩; 要求采用二叉排序树存放学生成绩,一门课程对应一棵二叉排序树; (4)成绩修改:若输入错误可进行修改; (5)统计分析:对某个班级学生的单科成绩进行统计,求出平均成绩;求出成绩处于指定分数段内的学生人数;求出每个学生一学期各科的平均成绩等; (6)查找:查找某个学生的某门课程成绩,查找某门课程成绩处于指定分数段内的学生名单等等。 (7)打印:打印一个班级学生的单科成绩;打印某一课程成绩处于指定分数段内的学生名单;打印学生在某一学期的成绩报告单。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值