📄 kechengshejidaoyou.c
字号:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<process.h> //exist
#define max 500
#define num 50
#define maxdist 10000
typedef struct graph {
int number;
char name[num];
char pr[num];
}graph; /*定义结构体存景点代码、名称、简介*/
//最短路径的C语言函数
//s[]代表标志,如果走过该点,则变为1,否则为0
//p[]表示到达该点的最短路径的前一个顶点的数值
//d[]表示记录从指定点到任意点的路程
//c[]表示十个景点的存放的数组
void shortestpath( int c[num][num],int n,int i,int d[num],int p[num])
{
int s[num];
int mindist;
int j,k,u;
for(j=0;j<n;j++){
d[j]=c[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)
if((d[u]+c[u][k])<d[k])
{
d[k]=d[u]+c[u][k];
p[k]=u;
}
}
}
//输出最短路径和最短距离函数
void input(int v,int n,int d[],int p[])
{
int i,pre;
for(i=0;i<n;i++)
if(i!=v){
printf("\n%d",i);
pre=p[i];
while(pre!=-1){
printf("<--%d",pre); //输出最短路径所经过的景点
pre=p[pre];
}
if(d[i]==maxdist)
printf("<--%d",v);
printf("\tshortestway:%d",d[i]);//输出最短距离
}
}
main()
{
graph pl[10]={{0,"classroom","selfstudy and teach"},{1,"playground","sand and grass"},
{2,"experiment","act yourself"},{3,"teaching building","teaching sth in the room"},
{4,"library","borrow books"},{5,"gate","shool gate"},
{6,"stadium","playing balls"},{7,"life-centre","service center"},
{8,"super market","buy sth you want"},{9,"camera room","seeing movies"}};//景点名称和简介
int i,j,n=10;
int d[num],p[num],a[num][num];
for(i=0;i<n;i++){ //给景点之间的路径赋最大值
for(j=0;j<n;j++)
a[i][j]=maxdist;
}
a[0][1]=20;a[0][2]=30;a[0][5]=40;a[1][4]=40;a[1][5]=60;a[1][6]=30; /*景点之间的路径长度*/
a[2][3]=35;a[2][7]=40;a[3][8]=15;a[3][9]=20;a[4][8]=35;a[4][9]=30;
a[5][2]=20;a[5][8]=45;a[6][0]=70;a[7][0]=50;a[8][9]=20;a[9][1]=55;
printf("首先请看学校的十个景点\n");
printf("\n");
printf("************************************************************************\n");
printf("0-->classroom 1-->playground 2-->experiment 3-->teaching building\n");
printf("\n");
printf("4-->library 5-->gate 6-->stadium 7-->life-centre\n");
printf("\n");
printf("8-->super market 9--> camera room\n");
printf("************************************************************************\n");
printf("\n");
printf("请看路径长度的描述--\n");
printf("\n");
printf("************************************************************************\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(a[i][j]!=maxdist)
printf("%d --> %d =%d ",i,j,a[i][j]);
}
printf("\n");
}
printf("其他路径不存在或者隔得很远\n");
printf("************************************************************************\n");
printf("\n");
printf("想知道关于,请按a\n");
printf("\n");
printf("想知道景点简介,请按i\n");
printf("\n");
printf("想知道某一点到其他景点的最短路径,请按v\n");
printf("\n");
printf("\n");
do //循环输入字符进行操作
{
switch(getchar()){ //switch语句判断要进行的操作
case'a':{
printf("This is a guide map that can tell you the shortest path from one place to another one\n");
printf("design time:2007 1.18\n");
printf("\n");
printf("想知道关于,请按a\n\n想知道景点简介,请按i\n\n想知道某一点到其他景点的最短路径,请按v\n");
}break;
case'i':{ //输入景点代码查景点名称和简介
while(1){
printf("input number 0->9: \n");
printf("如果想退出,请按 <0||>9 的数\n");
scanf("%d",&i);
if(i<0||i>9){
printf("不存在该景点!\n");
printf("\n");
printf("想知道关于,请按a\n\n想知道景点简介,请按i\n\n想知道某一点到其他景点的最短路径,请按v\n");
break;
} //输入非0->9退出
printf("%s,%s\n",pl[i].name,pl[i].pr);
}
}break;
case'v': { //输入景点代码查到其它景点的最短距离
do{
printf("\ninput the number:(0-9): \n");
printf("如果想退出,请按 <0||>9 的数\n");
scanf("%d",&i);
if(i<0||i>9){ //输入非0->9退出
printf("该景点不存在!\n");
printf("\n");
printf("想知道关于,请按a\n\n想知道景点简介,请按i\n\n想知道某一点到其他景点的最短路径,请按v\n");
break;
}
shortestpath(a,n,i,d,p);
printf("\n\n所有的最短路径分别为:\n");
input(i,n,d,p);
} while(1);
}break;
default: exit(1); //非正常字符退出
}
}while(getchar());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -