題0(2) 想參考的到題0去,請尊重一下本人,尊重卑微閱讀題答案

來源:互聯網
上載者:User

題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別人部落格的,這跟交作業沒什麼差別,而且連被誰抄去了也未必知道。常理性的說一下各方面:加深了自己對程式的運用及理解能力,也為自己複習了一下友元函數的運用,但也讓自己知道自己編程的能力並不是很強,看書本的是一回事,自己編則是另一回事,必須平時結合書本多編才會有實質上的提高。這次課程設計中也折射了“紙上得來終覺淺,絕知此事要躬行”的道理。這次課程設計對於我個人來說還是挺滿意的,因為平時都不怎麼編程,而這次是獨立完成的一次,雖然並不完善,但也是個人盡心之作。話雖不多,但也足以闡釋此次設計感受及所得。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.