问题描述: 设某城市有n个车站,并有m条公交线路连接这些车站。设这些公交车都是单向的,这n个车站被顺序编号为0~n-1。编号程序,输入该城市的公交线路数,车站个数,以及各公交线路上的各站编号。
实现要求:求得从站0出发乘公交车至站n一1的最少换车次数。
程序设计思路:利用输入信息构建一张有向图G(用邻接短阵g表示),有向图的顶点是车站,若有某条公交线路经i站能到达j站,就在顶点i到顶点j之间设置一条权为1的有向边<i,j)。这样,从站x至站y的最少上车次数便对应于图G中从点x至点y的最短路径长度。而程序要求的换车次数就是上车次数减1。
代码如下:
复制代码 代码如下:
#include <stdio.h>
#include <stdlib.h>
#define INFINITY 9999
#define MAXVNUM 30
char ans;
typedef struct
{
int Vnum;
int arcs[MAXVNUM][MAXVNUM]; //图的存储结构为邻接矩阵
}Graph;
int createGraph(Graph *g,int *start,int *end)
{
int n,m,i,j,k,s,count;
int t[MAXVNUM];
printf("\n★ 请输入公交车站数和公交车数:\n");
scanf("%d %d",&n,&m);
if(n<=1 || m<1)
return -1;
g->Vnum = n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
g->arcs[i][j] = INFINITY; //邻接矩阵初始化
for(s=0;s<m;s++)
{
printf("\n▲请输入第%d辆公交车所途经各站的编号【0<=编号<=%d,-1结束】:\n",s+1,n-1);
scanf("%d",&k);
count = 0;
while(k!=-1)
{
t[count++]=k;
scanf("%d",&k);
}
for(i=0;i<count-1;i++)
{
for(j=i+1;j<count;j++) //当前线路中,从t[i]到t[j]有直达公交车
g->arcs[t[i]][t[j]]=1;
}
}
printf("\n★ 请输入上车站编号和下车站编号【0<=编号<=%d】:\n",n-1);
scanf("%d%d",start,end);
if( *start<0 || *start>n-1 || *end<0 || *end>n-1)
return -1;
return 0;
}
int findMinmum(Graph g,int start,int end) //迪杰斯特拉算法找最小上车次数
{
int s[MAXVNUM];
int i,j,u,*dist,min;
if(start==end)
return 0;
dist=(int *)malloc(sizeof(int));
if(dist==NULL)
return -1;
for(i=0;i<g.Vnum;i++)
{
dist[i]=g.arcs[start][i]; //从start可直达的站点上车次数置1
s[i]=0; //所有站点的上车次数还未找到
}
s[start]=1; //已经找到站点start的最少上车次数
dist[start]=0; //从站点start到start的最少上车次数初始化为0
for(i=0;i<g.Vnum;++i)
{
min=INFINITY;
u=start;
for(j=0;j<g.Vnum;++j) //u是从start出发能够到达的所有站点中上车次数最少者
{
if(s[j]==0 && dist[j]<min)
{
min=dist[j];
u=j;
}
}
s[u]=1; //已经找到从站点start到u的最少上车次数,将u加入集合s
for(j=0;j<g.Vnum;++j) //更新当前情况下其他站点的最少上车次数
{
if(s[j]==0 && min+g.arcs[u][j]<dist[j])
dist[j]=min+g.arcs[u][j];
}
}
return dist[end];
}
int main(void)
{
int start,end,m;
printf("\n说明:");
printf("\n\t您好!欢迎使用该系统!\n");
printf("\t[一] 本系统是根据有向图创建的,请先输入你想乘车地点到目的地共有多少站和该地点的公交车数量。站数相当于有向图中的顶点数。\n");
printf("\t[二] 请输入每条公交车所路径的站点,相当于有向图中连接每条边的顶点。输入完后按-1进入下一辆公交车的路径。\n ");
printf("\t[三] 请输入上车地点的站编号和下车站的编号,相当于有向图中任意的两个顶点。输入完后系统将会根据所输入的信息输出最少换车次数。\n ");
do
{
Graph G;
if(createGraph(&G,&start,&end)==-1)
{
printf("\n 真遗憾!\n 创建有向图失败! \n 请重新输入数据 !\n");
return 0;
}
m=findMinmum(G,start,end);
if(m<INFINITY)
printf(" 恭喜!\n 有车可以到达该目的地\n 从上车站%d到下车站%d的最少换车次数为: %d\n",start,end,m-1);
else
printf("\n对不起!\n没有相应的公交车可以到达该站点 !\n");
printf("\n是否继续呢(y/n)?");
fflush(stdin);
ans=getchar();
system("cls");
}while(ans=='y' || ans=='Y');
printf("\n-----------------------谢谢你使用该系统!----------------------------");
system("pause");
return 0;
}
相关推荐:
用AI写文,开启创作新时代
提升写作效率,释放创意潜力文章生成AI软件的未来
SEO子-为你的网站注入流量的秘密武器,麻城网站网址优化
SEO单页网站:助力企业在线营销的一站式解决方案,湖南视频网站优化方式
ChatGPT无法加载?检查网络并尝试重启,助您快速恢复畅通体验,burj ai
什么是SEO金融,seo是做什么的 ,ai中转程序
为什么网站要做seo,网站做seo的目的是什么 ,ai初选
SEO妍:搜索引擎优化的艺术,轻松打造网络营销新未来,辽宁网站建设贵不贵
AI写作的崛起-“只能AI写作”背后的巨大潜力,舞狮摄影ai
SEO薪资这些,你也能月入过万!,天水网站建设公司
用AI批量下载工具,高效管理你的文件和资源
seo需要了解什么,seo需要学些什么内容 ,ovo ai
ChatGPT4网页空白:重新定义智能交互的未来,怎么登ai
seo诊断什么意思,seo诊断a5 ,约瑟夫ai
优化分析:提升企业效益的关键策略,山东大网站建设
ChatGPT当前不可用?背后的原因与解决方案全解析,ai propos
《收录情况:数字时代的网络信息检索与价值体现》,山东全域营销推广软件客服电话
seo网络推广是什么,seo网络推广是什么意思 ,ai哪里注音
SEO中权重是什么意思?让你迅速网站排名的核心秘密!,长颈鹿智能AI点读机
SEO总结:如何通过优化提升网站排名与流量,关键词排名消失
SEO元素-提升网站排名的核心要素,推广分成网站有哪些
SEO外链建设:提升网站排名的关键策略,ai偏执
SEO快排还有效果吗揭秘快速排名的真相与未来趋势,ai人像波普
主流seo是什么,seo是什么推广网站 ,AI心理师
ChatGPT页面空白不乏登录:让你秒变职场高手与生活智囊,百度ai 腾讯ai
SEO快速优化文章排名:提升网站流量的必备技巧,ai小苹果会员分享
为什么要监控SEO效果,国家为什么要监控个人 ,抚顺ai系统
文章写作AI:让创作更高效、精准的智能助手
“新关键词”开启智慧营销新篇章,助力品牌突围,自己如何做网站seo
常用AI工具,高效智能生活
如何识别文章是否由AI写作:技巧与方法解析
SEO立刻:快速提升网站排名,带你走在搜索引擎前沿,网站建设怎么推广好做
如何用AI改文章,让写作更高效、精准,提升内容质量
AI网页效果生成:开启网站设计的新纪元,ai画线祥云
seo链接有什么用,seo外链是什么意思 ,one ai写作
ChatGPT付款银行卡被拒绝?解决方案全解析!,小发猫ai智能写作查重能过吗
GPT人工智能-让未来触手可及的智慧之光,ai头花写真
AI公众号文章生成,轻松打造爆款内容
UCMS:引领智慧医疗新时代,打造数字化健康未来,推广工作谈营销
SEO才能:提升网站排名,突破网络营销的核心竞争力,南宁本地seo营销公司
SEO大量优化:如何通过精准策略提升网站流量,突破搜索引擎排名瓶颈,吕梁本地网站推广平台
ChatGPT最近不好用了?了解这些背后的原因与解决方案,ai sketcher
为什么关键词太少会影响你的网络营销效果?,陕西seo网站推广工具
ChatGPT登录界面都不显示了?可能是这些原因导致的!,上海小学ai智能课
“爱站”:开启网站优化与流量增长的新纪元,seo入门ppt
SEO优化攻略:如何通过精准策略提升网站排名与流量,aI ow翻译
SEO在广告领域的深度解析:如何利用SEO提升广告效果,网文写作ai工具
seo需要干什么,seo需要具备什么知识 ,ai梦境档案世岛大宅
SEO获客的秘诀:如何通过搜索引擎优化提升客户获取能力,厦门seo搜索优化排名
什么是seo发外链,seo外链类型有哪些 ,小小苏ai