问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

迪杰斯特拉算法 应用

发布网友 发布时间:2022-04-28 21:24

我来回答

1个回答

热心网友 时间:2022-06-23 06:32

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define True 1
#define False 0
#define max 99


typedef struct jingdian{//景点 结构体
char name[16];
char num;
}jingdian;

void jdfz(struct jingdian z[])//景点赋值
{
int n;

strcpy(z[0].name, "图书馆");//名字赋值
strcpy(z[1].name, "行政楼");
strcpy(z[2].name, "理学楼");
strcpy(z[3].name, "电子信息实验楼");
strcpy(z[4].name, "理科实验楼");
strcpy(z[5].name, "计算机实验楼");
strcpy(z[6].name, "工程实验楼");
strcpy(z[7].name, "生化实验楼");
strcpy(z[8].name, "体育场");
strcpy(z[9].name, "宿舍区");
strcpy(z[10].name, "文俊楼");
strcpy(z[11].name, "文清楼");
strcpy(z[12].name, "文新楼");
strcpy(z[13].name, "文逸楼");
strcpy(z[14].name, "演艺中心");

for (n = 0; n<15; n++){//代号赋值
z[n].num = n + 1;
}
}


void ljcx(char linjie[15][15], jingdian z[])//景点查询 函数
{
int a, b; //输入代号 用
int v;
int l;//节点数
int n, m;//循环 用
int s[20];//记录 已被确定的 最短路径长度
int path[20];//记录出发到目的i当前最短路径上i的  前驱节点
int d[20];//记录当前的最短路径  长度
int min;
int temp[20] = { 0 };
int t = 0;
int pre, i;

printf("输入出发地,目的地代号,以空格隔开:");
scanf("%d %d", &a, &b);
//printf("%d %d",a,b);//测试是否获得a b
if (a<1 || a>15 || b<1 || b>15)printf("输入错误!");//判断输入是否正确
else if (a == b)printf("你已在此处!");


else{
l = 15;
for (n = 1; n <= l; n++){//求最短路径
s[n] = False;
d[n] = linjie[a - 1][n - 1];
if (d[n]<max)path[n] = a;
else path[n] = -1;
}



s[a] = 1;//出发点 路径定义
d[a] = 0;
path[a] = -1;

for (n = 1; n<l; ++n){
v = -1;
min = max;
for (m = 1; m <= l; m++){
if (!s[m] && d[m]<min){
v = m;
min = d[m];
}
}
if (v == -1) break;
s[v] = True;

for (m = 1; m <= l; m++){
if (!s[m] && (d[v] + linjie[v - 1][m - 1]<d[m])){//有最短路径时更新前驱和长度
d[m] = d[v] + linjie[v - 1][m - 1];
path[m] = v;
}

}
}


printf("\n最短路径:\n");
pre = path[b];

for (n = 1; n<=15; n++)
printf("%d ", path[n]);
printf("\n");

while (pre != -1){               //路径倒序存入临时数组

temp[t++] = pre;
pre = path[pre];
}

//printf("11");

for (i = t - 1; i >= 0; i--){
printf("%s—>", z[temp[i] - 1].name);     //倒序输出临时数组
}
printf("%s", z[b - 1].name);
printf("\n\n");
}//else 尾
}


void main()//主函数
{
int n, m;    //循环用n,m
char a;
jingdian z[15];

char linjie[15][15];

for (n = 0; n<15; n++)//邻接表
for (m = 0; m<15; m++){
linjie[n][m] = max;
if (n == m + 1)linjie[n][m] = linjie[m][n] = 1;
}
linjie[9][0] = linjie[0][9] = 1;
linjie[11][1] = linjie[1][11] = 1;

for (n = 11; n<15; n++){
linjie[n][10] = linjie[10][n] = 1;
}

jdfz(z);//名字代号赋值

//for(n=0;n<15;n++){//名字代号赋值 测试
//puts(z[n].name);
//printf("%d",z[n].num);
//printf("\n");
//}




//for(n=0;n<15;n++){//邻接表 测试
//for(m=0;m<15;m++){
//printf("%d",linjie[n][m]);
//}
//printf("\n");
//}


printf("校园景点列表及其编号:\n\n");
printf("1图书馆        2行政楼      3 理学楼       4 电子信息实验楼   5 理科实验楼\n6计算机实验楼  7工程实验楼  8 生化实验楼   9 体育场           10 宿舍区\n11文俊楼       12文清楼    13 文新楼   14 文逸楼      15 演艺中心\n");
printf("===========================================================================");
printf("\n选择功能:\n1.景点介绍   2.路线查询   3.退出系统\n\n选择编号:");
a = getchar();

//putchar(a);//测试是否获得字符


if (a == '1'){//景点介绍

}

else if (a == '2'){//路径查询
ljcx(linjie, z);
}

else if (a == '3'){//退出
exit(0);
//printf("这个没显示就是结束了");//是否结束了
}

else printf("输入代号错误,请重新输入:\n");//代号错误
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
书包放在教室一晚上没事吗 格力空调三滴水的模式 将不快乐藏于心的伤感签名 人生如梦我失眠 缓刑期间犯罪还可以判缓吗 缓刑期间再有形势案件还可以判缓吗?对方不追久了赔了钱了, 缓刑期间又犯新罪还可以缓吗 由于老板拖欠工资并且把工资算错 我把货款留给自己用 然后走人去外省... 如果老板欠我工资,我拿了他的货款算不算职务侵占 职务侵占3万元货款已全数退回,会怎样量刑? 荞麦皮枕头多久换一次 荞麦枕头多久更换最合适 迪杰斯特拉算法为什么不能有负权边 C语言:迪杰斯特拉算法怎么看? 迪杰斯特拉算法的本质是贪心还是动态规划 迪杰斯特拉算法和普利姆算法的区别 迪杰斯特拉算法求得最短路径唯一么? 迪杰斯特拉算法的设计技术是?(选择答案) 迪杰斯特拉算法的算法实现 迪杰斯特拉算法 大学作业帮 一般线性规划 求详细解答步骤 迪杰斯特拉算法的原理 迪杰斯特拉算法的本质是贪心还是动态规划? 遥远的向日癸地初三孩子可以看吗 OSPF的算法是什么 三票篇观察生长的向日癸日记400字 迪杰斯特拉算法怎么算? 梦见向日癸和玉米啥寓意 迪杰斯特拉算法的算法思想 看完向日癸后的读后感850字作文 向日癸像什么 国旗是向日癸是什么 数据结构中迪杰斯特拉算法求最短路径 迪杰斯特拉算法和a*算法区别 迪杰斯特拉算法不懂啊 长沙县医保报销比例? 长沙本地户口农医保报销比例和双峰农医保 长沙县农村医保报销 《光遇》传递能量任务怎么完成? 光遇集结季第一个任务怎么做 《光遇》小王子任务六在哪? 《光遇》小金人(靓仔、光翼)全图攻略有哪些? 《光遇》大树屋第二个任务怎么做? 光遇潜海季第四个任务怎么做 光遇土地的试炼怎么过? 光遇梦想季第三个任务怎么做? 光遇3月12日每日任务怎么做 任务攻略 《光遇》圣岛先祖任务怎么做第5个? 微信解冻出现系统繁忙 冻结出现系统烦忙返回码-44是什么意思? 微信解冻系统繁忙? 解冻微信时显示系统繁忙怎么回事?