0号题目

来源:互联网 发布:舒尔耳机 知乎 编辑:程序博客网 时间:2024/04/30 01:21
<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="http://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;elsecout<<"最短路径为:"<<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代替无穷大elsearc[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
原创粉丝点击