2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  ——數(shù)據(jù)結(jié)構(gòu)(C語言)課程設(shè)計(jì)</p><p>  題目:可視化弗洛伊德最短路徑</p><p><b>  班級:計(jì)算機(jī)12級</b></p><p>  日期:2014年1月16日</p><p><b>  一.實(shí)習(xí)目的</b></p><p> 

2、 通過實(shí)習(xí),了解并初步掌握設(shè)計(jì)、實(shí)現(xiàn)較大系統(tǒng)的完整過程,包括系統(tǒng)分析、編碼設(shè)計(jì)、系統(tǒng)集成、以及調(diào)試分析,熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計(jì)、實(shí)現(xiàn)以及操作方法,為進(jìn)一步的應(yīng)用開發(fā)打好基礎(chǔ)。</p><p><b>  二.問題描述</b></p><p>  設(shè)計(jì)、實(shí)現(xiàn)隨機(jī)或手動建立一個(gè)有向圖,可以使用弗洛伊德算法輸出有向圖中節(jié)點(diǎn)之間最短路徑及權(quán)值,并把有向圖和弗洛伊德算法得

3、出的最短路徑及最小權(quán)值可視化。</p><p><b>  三.需求分析</b></p><p> ?。?) 可隨機(jī)建立有向圖,并在屏幕上使圖可視化;</p><p> ?。?) 可手動建立有向圖,添加節(jié)點(diǎn)、刪除節(jié)點(diǎn)、移動節(jié)點(diǎn)、添加邊、刪除邊、設(shè)置權(quán)值,并在屏幕上使圖可視化;</p><p>  (3) 對已建立的有向圖

4、實(shí)現(xiàn)弗洛伊德算法找出最短路徑,并在屏幕上使最短路徑及最小權(quán)值矩陣可視化;</p><p><b>  四.概要設(shè)計(jì)</b></p><p> ?。到y(tǒng)中子程序及功能要求:</p><p>  數(shù)據(jù)對象V:一個(gè)集合,該集合中的所有元素具有相同的特性</p><p>  數(shù)據(jù)關(guān)系R:R={VR}</p><

5、;p>  VR={<x,y>|P(x,y)^(x,y屬于V)}</p><p>  OnButtonCreategraph()//隨機(jī)建圖按鈕;</p><p>  OnButtonHuman()//手動建圖按鈕;</p><p>  OnButtonAddvertex()//添加節(jié)點(diǎn)按鈕;</p><p>  OnButt

6、onDeletevertex()//刪除節(jié)點(diǎn)按鈕;</p><p>  OnButtonMovevertex()//移動節(jié)點(diǎn)按鈕;</p><p>  OnButtonAddedge()//添加邊按鈕;</p><p>  OnButtonDeleteedge()//刪除邊按鈕;</p><p>  OnButtonSetweight()//

7、設(shè)置權(quán)值按鈕;</p><p>  OnButtonFloyd()//弗洛伊德算法按鈕;</p><p>  DrawDGRandom(TCenterPoint, pDC)//隨機(jī)建圖;</p><p>  DrawDiGraph(CDC *pDC)//圖可視化;</p><p>  DrawVexs(CDC *pDC)//節(jié)點(diǎn)可視化;<

8、;/p><p>  DrawEdges(CDC *pDC)//邊可視化;</p><p>  InitHand()//存儲節(jié)點(diǎn);</p><p>  CreateDGHand(CPoint centerpoint)//手動建圖;</p><p>  AddVertsHand()//添加節(jié)點(diǎn);</p><p>  Delet

9、eVex(CPoint vPoint)//刪除節(jié)點(diǎn);</p><p>  AddEdgesHand()//添加邊;</p><p>  DeleteEdge(CGraphVertex* pBeginVex, CGraphVertex* pEndVex)//刪除邊;</p><p>  SetEdgeWeightHand ()//設(shè)置權(quán)值;</p>&l

10、t;p>  Floyd()//弗洛伊德算法;</p><p>  DrawFloyd(CDC *pDC)//弗洛伊德可視化;</p><p>  各程序模塊之間的調(diào)用關(guān)系(子程序編號見上):</p><p>  主函數(shù)可調(diào)用子程序 1、2、3、4、5、6、7、8、9</p><p>  子程序1可調(diào)用子程序10</p>&

11、lt;p>  子程序2、3可調(diào)用子程序14、15</p><p>  子程序3可調(diào)用子程序16</p><p>  子程序4可調(diào)用子程序17</p><p>  子程序6可調(diào)用子程序18</p><p>  子程序7可調(diào)用子程序19</p><p>  子程序8可調(diào)用子程序20</p><p&

12、gt;  子程序9可調(diào)用子程序21</p><p>  子程序10可調(diào)用子程序11</p><p>  子程序16可調(diào)用子程序12</p><p>  子程序17可調(diào)用子程序12、19</p><p>  子程序18、19、20可調(diào)用子程序13</p><p>  子程序21可調(diào)用子程序22</p>&l

13、t;p><b>  五.測試分析</b></p><p>  按照附錄中的測試數(shù)據(jù),得出如下測試、分析結(jié)果:</p><p><b>  建圖功能:</b></p><p>  隨機(jī)建圖:隨機(jī)去頂節(jié)點(diǎn)的個(gè)數(shù)與位置及節(jié)點(diǎn)之間邊的連接、方向與權(quán)值大小,并在屏幕上輸出圖結(jié)構(gòu); </p><p>  

14、測試結(jié)果:可隨機(jī)輸出一有向圖。</p><p><b>  手動建圖:</b></p><p>  添加節(jié)點(diǎn):手動添加節(jié)點(diǎn)并放在任意位置;</p><p>  結(jié)果:可在任意位置添加節(jié)點(diǎn)。</p><p>  刪除節(jié)點(diǎn):手動刪除一節(jié)點(diǎn);</p><p>  結(jié)果:只能按順序刪除,無法任意刪除,有待

15、改進(jìn)。</p><p>  移動節(jié)點(diǎn):可將某一節(jié)點(diǎn)移動到其他位置;</p><p><b>  結(jié)果:尚未實(shí)現(xiàn)。</b></p><p>  添加邊:在任意兩個(gè)不同節(jié)點(diǎn)之間添加任意方向的邊;</p><p>  結(jié)果:可以實(shí)現(xiàn)添加任意方向的邊。</p><p>  刪除邊:刪除任意一條已存在的邊;

16、</p><p>  結(jié)果:可以刪除任意一條存在的邊。</p><p>  d、 設(shè)置權(quán)值:給任意一條已存在的邊賦予權(quán)值;</p><p>  結(jié)果:可以賦予權(quán)值;</p><p>  弗洛伊德算法:對已確定的有向圖通過Floyd算法找到任意兩點(diǎn)間的最短路徑 并在屏幕上輸出最短路徑及權(quán)值的矩陣;</p><p> 

17、 結(jié)果:可正確輸出路徑及權(quán)值。 </p><p><b>  六.使用說明</b></p><p>  1.運(yùn)行程序,首先出現(xiàn)主界面。主界面首先包括兩個(gè)個(gè)選項(xiàng):</p><p>  選項(xiàng)一:隨機(jī)建圖,點(diǎn)擊按鈕可在屏幕上輸出一隨機(jī)有向圖;</p><p>  選項(xiàng)二:手動建圖,可以手動建立有向圖。</p>&

18、lt;p>  2.手動建圖,出現(xiàn)6個(gè)新的選項(xiàng):</p><p>  選項(xiàng)一:添加節(jié)點(diǎn),在任意位置點(diǎn)擊添加一節(jié)點(diǎn);</p><p>  選項(xiàng)二:刪除節(jié)點(diǎn),可刪除一個(gè)節(jié)點(diǎn);</p><p>  選項(xiàng)三:移動節(jié)點(diǎn), 可以移動一節(jié)點(diǎn)到其他位置(待改進(jìn));</p><p>  選項(xiàng)四: 添加邊,點(diǎn)擊一個(gè)節(jié)點(diǎn)后再點(diǎn)擊另外一個(gè)即可添加該方向的邊;&l

19、t;/p><p>  選項(xiàng)五:刪除邊,點(diǎn)擊按鈕后輸入想刪除的邊的兩個(gè)節(jié)點(diǎn)即可刪除該邊;</p><p>  選項(xiàng)六:設(shè)置權(quán)值,點(diǎn)擊按鈕后輸入想添加的邊的兩個(gè)節(jié)點(diǎn)及權(quán)值即可給該邊賦予權(quán)值。</p><p>  3.弗洛伊德算法:對屏幕上已顯示的有向圖運(yùn)行Floyd算法,輸出最短路徑及權(quán)值。</p><p><b>  七.附錄:測試數(shù)據(jù)&

20、lt;/b></p><p>  九.附C語言實(shí)現(xiàn)源碼</p><p>  系統(tǒng)用到的抽象數(shù)據(jù)類型定義:</p><p>  class CDiGraph </p><p><b>  {</b></p><p><b>  public:</b></p>

21、<p>  CDiGraph();</p><p>  virtual ~CDiGraph();</p><p><b>  public:</b></p><p><b>  基本數(shù)據(jù):</b></p><p>  void DrawFloyd(CDC* pDC);</p>

22、;<p>  void Floyd();</p><p>  void Transform();</p><p>  void InitHand();</p><p>  //有向圖的當(dāng)前頂點(diǎn)數(shù)目 </p><p>  int vexnum; </p><p>  //有向圖的當(dāng)前邊數(shù)目 </p&g

23、t;<p>  int arcnum; </p><p>  //有向圖深度優(yōu)先已經(jīng)遍歷頂點(diǎn)數(shù)目</p><p>  int m_nDFSnum;</p><p>  //有向圖存儲鏈表 </p><p>  CTypedPtrList <CObList,CGraphVertex*> m_DigraphList;&l

24、t;/p><p>  CString Arrayvex[MAX];</p><p>  int Arrayweight[MAX][MAX];</p><p>  CString Path[MAX][MAX];</p><p><b>  基本操作:</b></p><p>  void Create

25、DGRandom(CPoint vCenterPoint); </p><p>  //自動創(chuàng)建有向圖 </p><p>  void CreateDGHand(CPoint vCenterPoint); </p><p><b>  //手動創(chuàng)建有向圖</b></p><p>  ///////////////////

26、////////////////////////////////////</p><p>  // 有向圖基本函數(shù) // </p><p>  /////////////////////////////////////////////////////// </p><p>  int Locate

27、InList(CString vName); </p><p>  //判斷頂點(diǎn)vPoint是否在有向圖存儲鏈表 </p><p>  CGraphVertex* IsPointInList(CPoint vPoint); </p><p>  //判斷頂點(diǎn)名vName是否在有向圖存儲鏈表 </p><p>  CGraphVertex* I

28、sNameInList(CString vName);</p><p>  //判斷邊(pBeginVex,pEndVex)是否在有向圖中 </p><p>  BOOL IsEdgeExist(CGraphVertex* pBeginVex,CGraphVertex* pEndVex);</p><p>  //判斷名為vName的頂點(diǎn)是否在有向圖中存儲鏈表中&l

29、t;/p><p>  CGraphVertex* IsVexNameInList(CString vName);</p><p>  //查找名為vName的頂點(diǎn)在有向圖中存儲鏈表中的地址</p><p>  CGraphVertex* FindVexNameInList(CString vName); </p><p>  //設(shè)置邊(vBeg

30、inVex,vEndVex)的權(quán)值</p><p>  void SetEdgeWeight(CString vBeginVex,CString vEndVex,int vWeight);</p><p>  void DeleteVex(CPoint vPoint); </p><p>  //刪除顯示位置為vPoint的頂點(diǎn)</p><p&

31、gt;  void DeleteEdge(CGraphVertex* pBeginVex,CGraphVertex* pEndVex); </p><p>  //刪除邊(pBeginVex,pEndVex) </p><p>  void InsertEdge(CGraphVertex* pBeginVex,CGraphVertex* pEndVex,int weight); </

32、p><p>  //插入頂點(diǎn)(pBeginVex,pEndVex)之間的邊</p><p>  ///////////////////////////////////////////////////////</p><p>  // 有向圖顯示函數(shù) //</p><p>  /

33、////////////////////////////////////////////////////// </p><p>  //有向圖可視化顯示 </p><p>  void DrawDiGraph(CDC *pDC); </p><p><b>  //顯示有向圖邊 </b></p><p>  void D

34、rawEdges(CDC *pDC);</p><p>  //顯示有向圖頂點(diǎn) </p><p>  void DrawVexs(CDC *pDC);</p><p><b>  };</b></p><p><b>  畫圖類:</b></p><p>  class CD

35、iGraphDraw : public CFormView</p><p><b>  {</b></p><p>  protected:</p><p>  CDiGraphDraw(); // protected constructor used by dynamic creation</p><p

36、>  DECLARE_DYNCREATE(CDiGraphDraw)</p><p>  // Form Data</p><p><b>  public:</b></p><p>  //{{AFX_DATA(CDiGraphDraw)</p><p>  enum { IDD = IDD_DIGRHDRAW_

37、FORMVIEW };</p><p>  // NOTE: the ClassWizard will add data members here</p><p>  //}}AFX_DATA</p><p>  // Attributes</p><p><b>  public:</b></p><

38、;p>  // Operations</p><p><b>  public:</b></p><p>  void DrawFloyd(CDC *pDC);</p><p>  //畫出弗洛伊德算法的結(jié)果</p><p>  void Floyd();</p><p>  void Se

39、tEdgeWeightHand();</p><p><b>  //手動設(shè)置權(quán)值</b></p><p>  void DelEdgesHand();</p><p><b>  //手動刪除邊</b></p><p>  void AddEdgesHand();</p><p

40、><b>  //手動添邊</b></p><p>  void MovVertsHand();</p><p>  BOOL m_Capture;</p><p>  void DelVertsHand();</p><p><b>  //手動刪除頂點(diǎn)</b></p><

41、;p>  void AddVertsHand();</p><p><b>  //手動添加頂點(diǎn)</b></p><p>  void CreateDGHand();</p><p><b>  //手動創(chuàng)建有向圖</b></p><p>  void CreateDGRandom();<

42、;/p><p><b>  //自動創(chuàng)建有向圖</b></p><p>  void ComputeFloyd();</p><p>  CGraphVertex* m_pEndNode;</p><p>  CGraphVertex* m_pBeginNode;</p><p>  CPoint m

43、_StartPoint;</p><p>  int m_FunType;</p><p>  void DrawDGHand(CDC *pDC);</p><p>  void DrawDGRandom(CPoint vCenterPoint, CDC *pDC);</p><p>  static DWORD WINAPI DiGraph

44、proc(LPVOID lpParameter);</p><p>  CDataStructVisualDoc* GetDocument();</p><p>  CDataStructVisualDoc* pDoc;</p><p>  bool m_StartFlag;</p><p>  HANDLE hEventDiGraph;&

45、lt;/p><p>  HANDLE hThreadDiGraph;</p><p>  int m_flag;</p><p><b>  有向圖邊的類:</b></p><p>  class CGraphEdge : public CObject</p><p><b>  {<

46、/b></p><p><b>  public:</b></p><p>  CGraphEdge();</p><p>  virtual ~CGraphEdge();</p><p><b>  public:</b></p><p>  bool EdgeDra

47、w(CGraphVertex* pBeginVex,CDC *pDC);</p><p><b>  int info;</b></p><p>  int m_weight;//邊的權(quán)值</p><p>  COLORREF m_color;//圖邊顏色</p><p>  CGraphVertex* m_pAdjVe

48、rtex;</p><p>  CGraphEdge* m_pNextEdge;</p><p><b>  }</b></p><p><b>  有向圖頂點(diǎn)的類:</b></p><p>  class CGraphVertex : public CObject </p><

49、;p><b>  {</b></p><p><b>  public:</b></p><p>  CGraphVertex();</p><p>  virtual ~CGraphVertex();</p><p><b>  public:</b></p>

50、;<p>  bool VexDraw(CDC *pDC);</p><p>  CPoint m_point;</p><p>  COLORREF m_color; //圖頂點(diǎn)顏色</p><p>  CGraphEdge* m_pFirstEdge; </p><p>  char m_strname; </p>

51、;<p>  BOOL m_bvisit; </p><p>  int m_nvisit;</p><p>  int m_pos;</p><p><b>  };</b></p><p>  弗洛伊德算法及其畫圖的代碼:</p><p>  void CDiGraph::Flo

52、yd()</p><p><b>  {</b></p><p>  Transform();</p><p>  int A[MAX][MAX];</p><p>  int i,j,k;</p><p>  for(i=0;i<vexnum;i++)</p><p&g

53、t;<b>  {</b></p><p>  for(j=0;j<vexnum;j++)</p><p><b>  {</b></p><p>  A[i][j]=Arrayweight[i][j];</p><p>  if(A[i][j]!=0&&A[i][j]<

54、INT_MAX)</p><p><b>  {</b></p><p>  Path[i][j]=Arrayvex[i]+Arrayvex[j];</p><p><b>  }</b></p><p><b>  }</b></p><p><

55、b>  }</b></p><p>  for(k=0;k<vexnum;k++)</p><p><b>  {</b></p><p>  for(i=0;i<vexnum;i++)</p><p><b>  {</b></p><p> 

56、 for(j=0;j<vexnum;j++)</p><p><b>  {</b></p><p>  if(A[i][j]>(A[i][k]+A[k][j]))</p><p><b>  {</b></p><p>  if(A[i][k]<INT_MAX&&

57、A[k][j]<INT_MAX)</p><p><b>  {</b></p><p>  A[i][j]=A[i][k]+A[k][j];</p><p>  if(Path[i][k]!='0'&&Path[k][j]!='0')</p><p><b&g

58、t;  {</b></p><p>  Path[i][j]=Path[i][k]+Arrayvex[j];</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p&

59、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for(i=0;i<vexnum;i++)</p><p><b>  {</b></p><p&g

60、t;  for(j=0;j<vexnum;j++)</p><p><b>  {</b></p><p>  Arrayweight[i][j]=A[i][j];</p><p><b>  }</b></p><p><b>  }</b></p>&l

61、t;p><b>  }</b></p><p>  void CDiGraph::DrawFloyd(CDC *pDC)</p><p><b>  {</b></p><p>  CString str;</p><p>  CPoint m_point;</p><p&

62、gt;  m_point.y=50;</p><p>  m_point.x=700;</p><p>  pDC->MoveTo(m_point.x,m_point.y);</p><p>  pDC->LineTo(m_point.x-10,m_point.y+10);</p><p>  pDC->MoveTo(m_p

63、oint.x-10,m_point.y+10);</p><p>  pDC->LineTo(m_point.x-10,m_point.y + vexnum*20 - 10);</p><p>  pDC->MoveTo(m_point.x-10,m_point.y + vexnum*20 - 10);</p><p>  pDC->LineTo(

64、m_point.x,m_point.y + vexnum*20 );</p><p>  for(int i=0;i<vexnum;i++)</p><p><b>  {</b></p><p>  m_point.x=700;</p><p>  for(int j=0;j<vexnum;j++)<

65、;/p><p><b>  {</b></p><p>  if(Arrayweight[i][j]<INT_MAX)</p><p><b>  {</b></p><p>  str.Format("%d",Arrayweight[i][j]);</p>&l

66、t;p>  pDC->TextOut(m_point.x,m_point.y,str);</p><p>  m_point.x+=20;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b>&

67、lt;/p><p>  str.Format("%d",Arrayweight[0][0]);</p><p>  pDC->TextOut(m_point.x,m_point.y,str);</p><p>  m_point.x+=20;</p><p><b>  }</b></p>

68、;<p><b>  }</b></p><p>  m_point.y+=20;</p><p><b>  }</b></p><p>  pDC->MoveTo(m_point.x-10,m_point.y);</p><p>  pDC->LineTo(m_poin

69、t.x,m_point.y-10);</p><p>  pDC->MoveTo(m_point.x,m_point.y-10);</p><p>  pDC->LineTo(m_point.x,m_point.y-vexnum*20+10);</p><p>  pDC->MoveTo(m_point.x,m_point.y-vexnum*20+

70、10);</p><p>  pDC->LineTo(m_point.x-10,m_point.y-vexnum*20);</p><p>  m_point.y=250;</p><p>  m_point.x=700;</p><p>  pDC->MoveTo(m_point.x,m_point.y);</p>

71、<p>  pDC->LineTo(m_point.x-10,m_point.y+10);</p><p>  pDC->MoveTo(m_point.x-10,m_point.y+10);</p><p>  pDC->LineTo(m_point.x-10,m_point.y + vexnum*20 - 10);</p><p> 

72、 pDC->MoveTo(m_point.x-10,m_point.y + vexnum*20 - 10);</p><p>  pDC->LineTo(m_point.x,m_point.y + vexnum*20 );</p><p>  for(i=0;i<vexnum;i++)</p><p><b>  {</b>&

73、lt;/p><p>  m_point.x=700;</p><p>  for(int j=0;j<vexnum;j++)</p><p><b>  {</b></p><p>  str.Format("%s",Path[i][j]);</p><p>  pDC-&

74、gt;TextOut(m_point.x,m_point.y,str);</p><p>  m_point.x+=45;</p><p><b>  }</b></p><p>  m_point.y+=20;</p><p><b>  }</b></p><p>  p

75、DC->MoveTo(m_point.x-10,m_point.y);</p><p>  pDC->LineTo(m_point.x,m_point.y-10);</p><p>  pDC->MoveTo(m_point.x,m_point.y-10);</p><p>  pDC->LineTo(m_point.x,m_point.y-

76、vexnum*20+10);</p><p>  pDC->MoveTo(m_point.x,m_point.y-vexnum*20+10);</p><p>  pDC->LineTo(m_point.x-10,m_point.y-vexnum*20);</p><p><b>  }</b></p><p&g

77、t;<b>  界面顯示:</b></p><p>  class CLeftPane : public CFormView</p><p><b>  {</b></p><p>  protected:</p><p>  CLeftPane(); // protected

78、constructor used by dynamic creation</p><p>  DECLARE_DYNCREATE(CLeftPane)</p><p>  // Form Data</p><p><b>  public:</b></p><p>  //{{AFX_DATA(CLeftPane)<

79、;/p><p>  enum { IDD = IDD_LEFTPANE_FORMVIEW };</p><p>  CTreeCtrlm_LeftTree;</p><p>  //}}AFX_DATA</p><p>  // Attributes</p><p><b>  public:</b>

80、;</p><p>  // Operations</p><p><b>  public:</b></p><p>  CRightFrame* m_pRightSwitchFrame;</p><p>  // Overrides</p><p>  // ClassWizard gener

81、ated virtual function overrides</p><p>  //{{AFX_VIRTUAL(CLeftPane)</p><p><b>  public:</b></p><p>  virtual void OnInitialUpdate();</p><p>  protected:<

82、/p><p>  virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support</p><p>  virtual void CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType = adjustBorder);</p><p>  //}

83、}AFX_VIRTUAL</p><p>  // Implementation</p><p>  protected:</p><p>  virtual ~CLeftPane();</p><p>  #ifdef _DEBUG</p><p>  virtual void AssertValid() const

84、;</p><p>  virtual void Dump(CDumpContext& dc) const;</p><p><b>  #endif</b></p><p>  // Generated message map functions</p><p>  //{{AFX_MSG(CLeftPane)

85、</p><p>  afx_msg void OnSize(UINT nType, int cx, int cy);</p><p>  afx_msg void OnCancelMode();</p><p>  afx_msg void OnSelchangedLeftpaneTree(NMHDR* pNMHDR, LRESULT* pResult);<

86、/p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  private:</b></p><p>  void InitTree();</p><p>  HTREEITEM m_Root;</p><p

87、>  CImageList m_TreeImageList;</p><p>  CRect m_sRect;</p><p><b>  };</b></p><p><b>  樹的顯示:</b></p><p>  void CLeftPane::InitTree()</p>

88、<p><b>  {</b></p><p>  LPSTR pszText;</p><p>  m_TreeImageList.Create(16,16,TRUE,6,1); </p><p>  HICON hIcon; </p><p>  hIcon=::LoadIcon(AfxGetResou

89、rceHandle(),MAKEINTRESOURCE(IDI_ICON1));</p><p>  m_TreeImageList.Add(hIcon); </p><p>  hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2)); </p><p>  m_TreeImageLis

90、t.Add(hIcon); </p><p>  hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3)); </p><p>  m_TreeImageList.Add(hIcon); </p><p>  hIcon=::LoadIcon(AfxGetResourceHandle(),

91、MAKEINTRESOURCE(IDI_ICON4)); </p><p>  m_TreeImageList.Add(hIcon);</p><p>  hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON5)); </p><p>  m_TreeImageList.Add(hIcon)

92、; </p><p>  m_LeftTree.SetImageList(&m_TreeImageList,TVSIL_NORMAL); </p><p>  //////////////////////在樹視圖控件添加信息///////////////////////////////////// </p><p>  m_LeftTree.DeleteAl

93、lItems();//清空當(dāng)前書控件所有節(jié)點(diǎn) </p><p>  m_Root=m_LeftTree.InsertItem("動態(tài)切換視圖");//插入根節(jié)點(diǎn) </p><p>  TV_INSERTSTRUCT TCItem; //設(shè)屏蔽 </p><p>  TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TV

94、IF_IMAGE|TVIF_SELECTEDIMAGE; </p><p>  TCItem.hInsertAfter=TVI_LAST;//在最后項(xiàng)之后 </p><p>  CString strTreeNodeName="測試一"; </p><p>  pszText=strTreeNodeName.LockBuffer(); </

95、p><p>  TCItem.hParent=m_Root; </p><p>  TCItem.item.pszText=pszText; </p><p>  TCItem.item.iImage=1; </p><p>  TCItem.item.iSelectedImage=2; </p><p>  HTREEI

96、TEM hCurrent=m_LeftTree.InsertItem(&TCItem); </p><p>  m_LeftTree.SetItemData(hCurrent,1); </p><p>  strTreeNodeName="測試二"; </p><p>  pszText=strTreeNodeName.LockBuffe

97、r(); </p><p>  TCItem.hParent=m_Root; </p><p>  TCItem.item.pszText=pszText;</p><p>  TCItem.item.iImage=1;</p><p>  TCItem.item.iSelectedImage=2;</p><p> 

98、 hCurrent=m_LeftTree.InsertItem(&TCItem);</p><p>  m_LeftTree.SetItemData(hCurrent,2);</p><p>  m_LeftTree.Expand(m_Root, TVE_EXPAND); //展開根節(jié)點(diǎn)</p><p>  strTreeNodeName="單鏈表

99、"; </p><p>  pszText=strTreeNodeName.LockBuffer(); </p><p>  TCItem.hParent=m_Root;</p><p>  TCItem.item.pszText=pszText;</p><p>  TCItem.item.iImage=1; </p>

100、<p>  TCItem.item.iSelectedImage=2;</p><p>  hCurrent=m_LeftTree.InsertItem(&TCItem);</p><p>  m_LeftTree.SetItemData(hCurrent,3);</p><p>  m_LeftTree.Expand(m_Root, TVE_

101、EXPAND); //展開根結(jié)點(diǎn)</p><p>  strTreeNodeName="有向圖";</p><p>  pszText=strTreeNodeName.LockBuffer();</p><p>  TCItem.hParent=m_Root;</p><p>  TCItem.item.pszText=p

102、szText;</p><p>  TCItem.item.iImage=1;</p><p>  TCItem.item.iSelectedImage=2;</p><p>  hCurrent=m_LeftTree.InsertItem(&TCItem);</p><p>  m_LeftTree.SetItemData(hCur

103、rent,31);</p><p>  strTreeNodeName="創(chuàng)建有向圖";</p><p>  pszText=strTreeNodeName.LockBuffer();</p><p>  TCItem.hParent=hCurrent;</p><p>  TCItem.item.pszText=pszT

104、ext;</p><p>  TCItem.item.iImage=3;</p><p>  TCItem.item.iSelectedImage=4;</p><p>  HTREEITEM hCurrent_CrtUndiGraph=m_LeftTree.InsertItem(&TCItem);</p><p>  m_LeftT

105、ree.SetItemData(hCurrent_CrtUndiGraph,4);</p><p>  m_LeftTree.Expand(m_Root, TVE_EXPAND); //展開根結(jié)點(diǎn)</p><p><b>  }</b></p><p><b>  界面切換功能:</b></p><p&

106、gt;  void CLeftPane::OnSelchangedLeftpaneTree(NMHDR* pNMHDR, LRESULT* pResult) </p><p><b>  {</b></p><p>  NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;</p><p>  // T

107、ODO: Add your control notification handler code here</p><p>  int nIndex=-1;</p><p>  UINT nView;</p><p>  nIndex=m_LeftTree.GetItemData(m_LeftTree.GetSelectedItem());</p>&l

108、t;p>  switch(nIndex)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  nView=VIEW_SPLITTER1;</p><p>  //if (nView) m_pRightPaneFrame->Swi

109、tchToView(nView);</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  nView=VIEW_SPLITTER2;</p><p>  //if (nView) m_pRightPaneFrame->Swit

110、chToView(nView);</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  nView=VIEW_SPLITTERLINKLIST;</p><p><b>  break;</b></p&g

111、t;<p><b>  case 4:</b></p><p>  nView=VIEW_SPLITTER_CRTDIGRAPH;</p><p><b>  break;</b></p><p><b>  default:</b></p><p><b&

112、gt;  break;</b></p><p><b>  }</b></p><p>  m_pRightSwitchFrame->SwitchToView(nView);</p><p>  *pResult = 1;</p><p><b>  }</b></p>

113、<p>  十.小組成員分工情況表</p><p>  最開始的樹及有向圖是由每個(gè)人獨(dú)立完成來熟悉操作和代碼,在做有向圖及弗洛伊德算法時(shí),王樸和李元主要研究有向圖的建立及可視化,包赫和李崇飛主要研究弗洛伊德算法程序,出現(xiàn)問題時(shí)由4個(gè)人一起討論、試驗(yàn)來解決,最后程序由大家共同做出。</p><p><b>  十一.課程總結(jié)</b></p>

114、<p>  通過兩周8天的程序設(shè)計(jì)課程,對工程的建立及算法的運(yùn)算與嵌套有了更深刻的理解和操作能力,對團(tuán)隊(duì)合作完成一個(gè)工程有了一定的了解,團(tuán)隊(duì)合作意識加深了很多。</p><p>  完成了有向圖弗洛伊德算法找到最短路徑及權(quán)值的課程設(shè)計(jì),對數(shù)據(jù)結(jié)構(gòu)有了進(jìn)一步的接觸及操作,將書上的算法搬到程序的過程中加強(qiáng)了編程能力。</p><p>  十二.項(xiàng)目進(jìn)度及成績評定</p>

115、<p>  課題名稱: </p><p>  完成者: </p><p>  1、設(shè)計(jì)進(jìn)度及完成情況</p><p><b>  2、成績評定:</b></p><p>  設(shè)計(jì)成績: (教師填寫)<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論