0号题目

<span style="line-height: 26px; font-family: 微软雅黑, sans-serif; color: red; font-size: 9pt;"><span style="font-size: 18px;"><strong>题目<span lang="EN-US">0</span></strong></span></span><span lang="EN-US" style="color: rgb(51, 51, 51); line-height: 26px; font-family: 微软雅黑, sans-serif; font-size: 9pt;">.GDOU</span><span style="color: rgb(51, 51, 51); line-height: 26px; font-family: 微软雅黑, sans-serif; font-size: 9pt;">是真是一个好地方,校园如一座大花园,美丽而宽广。校园有许多建筑如教学楼、饭堂、宿舍楼、图书馆、体育馆、运动场、商业街、医院等,还有一些著名的风景点。现请根据学校的平面图,找出一些重要的场所,画出学校的平面图(场所可以根据其重要性适当减少),根据实际画出不同点间的路径,并估算每两个场所间的路径长。请设计数据结构并编程,当给出一个出发点和要到达另外一个场所的信息时,请给出最佳路径,并输出路径相关信息。</span><img src="https://img-blog.csdn.net/20150111224503046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaml1dG91bG9uZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
1:代码分析
#ifndef MGRAPH_H
#define MGRAPH_H
#include <iostream>
using namespace std;
const int MaxSize=50;
class Mgraph
{
public:
Mgraph(int a[],int n,int e);
private:  
int vertex[MaxSize];
int arc[MaxSize][MaxSize];
int vertexNum,arcNum;
friend void Floyd(Mgraph G,int v)//定义友元函数访问私有成员
{
int dist[10][20],path[10][20];int i,j,k;
for(i=0;i<G.vertexNum;i++)
for(j=0;j<G.vertexNum;j++)
{
dist[i][j]=G.arc[i][j];//初始化dist[i][j]
if(dist[i][j]!=99)
path[i][j]=10*G.vertex[i]+G.vertex[j];//初始化路径
}
for(k=0;k<G.vertexNum;k++)
for(i=0;i<G.vertexNum;i++)
for(j=0;j<G.vertexNum;j++)

if(dist[i][k]+dist[k][j]<dist[i][j])
{
dist[i][j]=dist[i][k]+dist[k][j];
path[i][j]=j*100+10*k+i;//数字表示最短路径所经顶点
}
//求出最短的路径
for(;;)
{
cout<<"输入需查询的顶点,输入11则退出:";cin>>k;
for(i=0;i<G.vertexNum;i++)//查询指定顶点相关信息
if(k>G.vertexNum)
{
if(k!=11)  { cout<<"输入无效,请重输。"<<endl;break;}//输入顶点号以外数字则重输
else exit(0);//输入11则直接退出程序
}
else if(i!=k)
{
cout<<k<<"与"<<i<<"间的最短距离为"<<dist[k][i]<<endl;
if(path[k][i]>100)
cout<<"最短路径为:"<<k<<"→"<<(path[k][i]%100)/10<<"→"<<i<<endl;
else
cout<<"最短路径为:"<<k<<"→"<<i<<endl;
}//输出最短路径
}
}
};
Mgraph::Mgraph(int a[],int n,int e)
{
vertexNum=n;arcNum=e;
int i,j,k;
cout<<"顶点0:校门口\n顶点2:水生博物馆\n顶点3:游泳池\n顶点4:水生博物馆\n"<<"顶点4:校医院\n顶点"<<endl;
for(i=0;i<vertexNum;i++)
vertex[i]=a[i];//初始化顶点
for(i=0;i<vertexNum;i++)
for(int j=0;j<arcNum;j++)
arc[i][j]=0;//初始化顶点间的距离
for(k=0;k<arcNum;k++)
{
cout<<"输入顶点序号:";
cin>>i>>j;
for(;;)//无条件循环,直至break退出
{
if(i>vertexNum||j>vertexNum||i==j){
cout<<"输入无效,请重输:";cin>>i>>j;}//输入顶点号以外数字则重输
else break;
}
cout<<"输入点"<<i<<"到"<<j<<"间需要的时间(min):";
cin>>arc[i][j];
}
for(i=0;i<vertexNum;i++)
for(j=0;j<arcNum;j++)
{
if(i==j)  arc[i][j]=0;
if(i!=j&&arc[i][j]==0)
arc[i][j]=999;//999代替无穷大
else
arc[j][i]=arc[i][j];
}
}
#endif

#include "Mgraph.h"

void main()
{
int a[7]={0,1,2,3,4,5,6};//初始化顶点数
Mgraph Mgraph(a,7,11);
Floyd(Mgraph,0);//调用友元函数
}

2:输入顶点及顶点的最短距离


    输入顶点错误


     输入11退出


    

    收获和体会

           在此次作业中我发现了自己很多错误,并及时取得了改进,受益于这次作业我学到了更多知识,虽然其间有各种小小的困难,但是我通过网络或者求助于同学终于解决了这些错误,对此我表示累并快乐着,感谢老师和同学的艰辛付出,感动的我鼻涕流了一地!!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值