0号题

来源:互联网 发布:小学英语单词记忆软件 编辑:程序博客网 时间:2024/06/05 11:30
#include<iostream>using namespace std;const int MaxSize=40;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 G,int v){int dist[20][30],path[20][30];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];if(dist[i][j]!=99)path[i][j]=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]=path[i][k]+path[k][j];}cout<<"输入需查询的顶点";cin>>k;for(i=0;i<G.vertexNum;i++){cout<<k<<"与"<<i<<"间的最短距离为"<<dist[k][i]<<endl;}}T vertex[MaxSize];int arc[MaxSize][MaxSize];int vertexNum,arcNum;};template<class T>Mgraph<T>::Mgraph(T a[],int n,int e){vertexNum=n;arcNum=e;int i,j,k;cout<<"顶点0:海涵"<<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<<"输入2个顶点的序号:";cin>>i>>j;cout<<"输入点"<<i<<"到"<<j<<"间的距离(m):";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]=无穷远;elsearc[j][i]=arc[i][j];}}int main(){int a[10]={0,1,2,3,4,5,6,7,8,9};Mgraph<int>Mgraph(a,10,15);Floyd(Mgraph,0);return 0;}

0 0