首页 > 代码库 > 题0(2) 想参考的到题0去,请尊重一下本人

题0(2) 想参考的到题0去,请尊重一下本人

技术分享

技术分享技术分享技术分享技术分享


二、  代码及分析

#include<iostream>
using namespace std;
const int MaxSize=20;
template<class T>
class Mgraph
{
public:
Mgraph(T a[],int n,int e);
private:
T vertex[MaxSize];
int arc[MaxSize][MaxSize];
int vertexNum,arcNum;
friend void Floyd(Mgraph<T>G,int v);
};
template<class T>
Mgraph<T>::Mgraph(T a[],int n,int e)
{
vertexNum=n;arcNum=e;int i,j,k;
cout<<"顶点0:校门口\t顶点1:水生博物馆\t顶点2:主楼"<<endl
<<"顶点3:图书馆\t顶点4:体育馆\t        顶点5:东区体育场"<<endl
<<":顶点6:西湖\t顶点7:小后山\t        顶点8:校医院"<<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(;;)
{
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]=99;//以99代替无穷大
else
arc[j][i]=arc[i][j];
}


}
template<class T>
void Floyd(Mgraph<T>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;//以数字表示最短路径所经顶点
}
//求出最短路径
cout<<"顶点0:校门口\t顶点1:水生博物馆\t顶点2:主楼"<<endl
<<"顶点3:图书馆\t顶点4:体育馆\t        顶点5:东区体育场"<<endl
<<":顶点6:西湖\t顶点7:小后山\t        顶点8:校医院"<<endl;
for(;;)
{
cout<<"输入需查询的顶点,输入88则退出:";cin>>k;
for(i=0;i<G.vertexNum;i++)//查询指定顶点相关信息
if(k>G.vertexNum)
{
if(k!=88) { cout<<"输入无效,请重输。"<<endl;break;}//输入顶点号以外数字则重输
else exit(0);//输入88则直接退出程序
}
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;
}//输出最短路径
}
}
int main()
{
int a[9]={0,1,2,3,4,5,6,7,8};//初始化顶点数,可按自己喜好添加减少
Mgraph<int>Mgraph(a,8,15);
Floyd(Mgraph,0);//调用友元函数
return 0;
}

三、  收获、体会及不足:

由于发现之前发的题0被多人参考甚至看到别人博客上的跟我之前发的一模一样,所以再发1篇稍作改变和改善了的,如友元函数的外定义,重新的选点。同时也觉得这样的教学方法必要性不大,想学的依然会按时交作业,不想学的依然copy别人博客的,这跟交作业没什么差别,而且连被谁抄去了也未必知道。

常理性的说一下各方面:加深了自己对程序的运用及理解能力,也为自己复习了一下友元函数的运用,但也让自己知道自己编程的能力并不是很强,看书本的是一回事,自己编则是另一回事,必须平时结合书本多编才会有实质上的提高。这次课程设计中也折射了“纸上得来终觉浅,绝知此事要躬行”的道理。这次课程设计对于我个人来说还是挺满意的,因为平时都不怎么编程,而这次是独立完成的一次,虽然并不完善,但也是个人尽心之作。话虽不多,但也足以阐释此次设计感受及所得。



题0(2) 想参考的到题0去,请尊重一下本人