题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别人博客的,这跟交作业没什么差别,而且连被谁抄去了也未必知道。

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

时间: 2024-08-06 08:34:49

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

POJ 2328 Guessing Game(一道让我想哭的水题!)

[题意简述]:就是猜数,我想大家一定会在电视上看过这样类似的节目. [分析]:WA到死,本来就应该是一道简单的水题,但是由于我本人也很水,在控制字符的输入上有了点小问题,所以做了很久!想的也有点杂,有点多!还是题做得少. 这个是我WA到死的代码!! // WA 代码!! #include<iostream> #include<cstring> using namespace std; int main() { int a; char ans[10]; while(1) { bool

U40620 还没想好名字的题

U40620 niiickの还没想好名字的题 给定一个长度为\(n\)的序列\(a_1,a_2...,a_n\) 要求将这\(n\)个数分为\(m\)组,每组可以有任意多个数,但同一组中的数必须是原序列中连续的一段 求如何分组能使得各组的标准差最小, 即求\[min(\sqrt{\sum_{i=1}^m\frac{(x_i-\overline{x})^2}{m}})\]其中\(x_i\)为第\(i\)组数的和,\(\overline{x}\)为各组数和的平均值 求这个最小值 纪念一下交了19遍(

U45490 还没想好名字的题Ⅱ

这一题的环状板 Solution 暴力断环为链, 枚举起点跑 \(n\) 遍 \(DP\), 取最小值即可 Code #include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<algorithm> #include<climits> #include<cmath> #define LL long long #define R

PAT 甲级 1067 Sort with Swap(0, i) (25 分)(贪心,思维题)*

1067 Sort with Swap(0, i) (25 分) Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order. But what if Swap(0, *) is the ONLY operation that is allowed to use? For example, to sort {4, 0, 2, 1, 3} we may ap

JavaScript编程题(含腾讯2016校招题)

作者:ManfredHu 链接:http://www.manfredhu.com/2016/04/02/15-veryGoodForUsing/ 声明:版权所有,转载请保留本段信息,否则请不要转载 几道觉得挺有意思的编程题,感觉做下来,自己对一些新方法的看法有了新的变化. 比如indexOf,reduce,Array.isArray,forEach这些方法,以前一看到兼容性是IE9+就有点害怕,项目中不敢用,导致后面越来越陌生,不过现在一想的话.其实只要用Polyfill或者提前fix掉就可以了

Microsoft Visual C++ 6.0预处理器参考手册

返回总目录 Microsoft Visual C++ 6.0 预处理器参考手册 目录引言.......................................................................................................................3 特殊术语.................................................................................

LiberOJ 6004. 「网络流 24 题」圆桌聚餐 网络流版子题

#6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 假设有来自 n nn 个不同单位的代表参加一次国际会议.每个单位的代表数分别为 ri r_ir?i??.会议餐厅共有 m mm 张餐桌,每张餐桌可容纳 ci c_ic?i?? 个代表就餐.为了使代表们充分交流,希望从同一个单位来的代表不在同一个餐桌就餐. 试设计一个算法,给出满足要求的

HDU2054_A == B ?【模拟题】【大数】【水题】

A == B ? Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 64243    Accepted Submission(s): 10061 Problem Description Give you two numbers A and B, if A is equal to B, you should print "YES"

Hadoop 2.6.0分布式部署参考手册

Hadoop 2.6.0分布式部署参考手册 关于本参考手册的word文档,可以到如下地址下载:http://download.csdn.net/detail/u012875880/8285323 1.环境说明 1.1安装环境说明 本列中,操作系统为Centos 7.0,JDK版本为Oracle HotSpot 1.7,Hadoop版本为Apache Hadoop 2.6.0,操作用户为hadoop. 2.2 Hadoop集群环境说明: 集群各节点信息参考如下: 主机名 IP地址 角色 Resou