版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> ——數(shù)據(jù)結(jié)構(gòu)(C語言)課程設(shè)計</p><p> 題目:可視化弗洛伊德最短路徑</p><p><b> 班級:計算機12級</b></p><p> 日期:2014年1月16日</p><p><b> 一.實習目的</b></p><p>
2、 通過實習,了解并初步掌握設(shè)計、實現(xiàn)較大系統(tǒng)的完整過程,包括系統(tǒng)分析、編碼設(shè)計、系統(tǒng)集成、以及調(diào)試分析,熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計、實現(xiàn)以及操作方法,為進一步的應用開發(fā)打好基礎(chǔ)。</p><p><b> 二.問題描述</b></p><p> 設(shè)計、實現(xiàn)隨機或手動建立一個有向圖,可以使用弗洛伊德算法輸出有向圖中節(jié)點之間最短路徑及權(quán)值,并把有向圖和弗洛伊德算法得
3、出的最短路徑及最小權(quán)值可視化。</p><p><b> 三.需求分析</b></p><p> ?。?) 可隨機建立有向圖,并在屏幕上使圖可視化;</p><p> ?。?) 可手動建立有向圖,添加節(jié)點、刪除節(jié)點、移動節(jié)點、添加邊、刪除邊、設(shè)置權(quán)值,并在屏幕上使圖可視化;</p><p> ?。?) 對已建立的有向圖
4、實現(xiàn)弗洛伊德算法找出最短路徑,并在屏幕上使最短路徑及最小權(quán)值矩陣可視化;</p><p><b> 四.概要設(shè)計</b></p><p> .系統(tǒng)中子程序及功能要求:</p><p> 數(shù)據(jù)對象V:一個集合,該集合中的所有元素具有相同的特性</p><p> 數(shù)據(jù)關(guān)系R:R={VR}</p><
5、;p> VR={<x,y>|P(x,y)^(x,y屬于V)}</p><p> OnButtonCreategraph()//隨機建圖按鈕;</p><p> OnButtonHuman()//手動建圖按鈕;</p><p> OnButtonAddvertex()//添加節(jié)點按鈕;</p><p> OnButt
6、onDeletevertex()//刪除節(jié)點按鈕;</p><p> OnButtonMovevertex()//移動節(jié)點按鈕;</p><p> OnButtonAddedge()//添加邊按鈕;</p><p> OnButtonDeleteedge()//刪除邊按鈕;</p><p> OnButtonSetweight()//
7、設(shè)置權(quán)值按鈕;</p><p> OnButtonFloyd()//弗洛伊德算法按鈕;</p><p> DrawDGRandom(TCenterPoint, pDC)//隨機建圖;</p><p> DrawDiGraph(CDC *pDC)//圖可視化;</p><p> DrawVexs(CDC *pDC)//節(jié)點可視化;<
8、;/p><p> DrawEdges(CDC *pDC)//邊可視化;</p><p> InitHand()//存儲節(jié)點;</p><p> CreateDGHand(CPoint centerpoint)//手動建圖;</p><p> AddVertsHand()//添加節(jié)點;</p><p> Delet
9、eVex(CPoint vPoint)//刪除節(jié)點;</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> 隨機建圖:隨機去頂節(jié)點的個數(shù)與位置及節(jié)點之間邊的連接、方向與權(quán)值大小,并在屏幕上輸出圖結(jié)構(gòu); </p><p>
14、測試結(jié)果:可隨機輸出一有向圖。</p><p><b> 手動建圖:</b></p><p> 添加節(jié)點:手動添加節(jié)點并放在任意位置;</p><p> 結(jié)果:可在任意位置添加節(jié)點。</p><p> 刪除節(jié)點:手動刪除一節(jié)點;</p><p> 結(jié)果:只能按順序刪除,無法任意刪除,有待
15、改進。</p><p> 移動節(jié)點:可將某一節(jié)點移動到其他位置;</p><p><b> 結(jié)果:尚未實現(xiàn)。</b></p><p> 添加邊:在任意兩個不同節(jié)點之間添加任意方向的邊;</p><p> 結(jié)果:可以實現(xiàn)添加任意方向的邊。</p><p> 刪除邊:刪除任意一條已存在的邊;
16、</p><p> 結(jié)果:可以刪除任意一條存在的邊。</p><p> d、 設(shè)置權(quán)值:給任意一條已存在的邊賦予權(quán)值;</p><p> 結(jié)果:可以賦予權(quán)值;</p><p> 弗洛伊德算法:對已確定的有向圖通過Floyd算法找到任意兩點間的最短路徑 并在屏幕上輸出最短路徑及權(quán)值的矩陣;</p><p>
17、 結(jié)果:可正確輸出路徑及權(quán)值。 </p><p><b> 六.使用說明</b></p><p> 1.運行程序,首先出現(xiàn)主界面。主界面首先包括兩個個選項:</p><p> 選項一:隨機建圖,點擊按鈕可在屏幕上輸出一隨機有向圖;</p><p> 選項二:手動建圖,可以手動建立有向圖。</p>&
18、lt;p> 2.手動建圖,出現(xiàn)6個新的選項:</p><p> 選項一:添加節(jié)點,在任意位置點擊添加一節(jié)點;</p><p> 選項二:刪除節(jié)點,可刪除一個節(jié)點;</p><p> 選項三:移動節(jié)點, 可以移動一節(jié)點到其他位置(待改進);</p><p> 選項四: 添加邊,點擊一個節(jié)點后再點擊另外一個即可添加該方向的邊;&l
19、t;/p><p> 選項五:刪除邊,點擊按鈕后輸入想刪除的邊的兩個節(jié)點即可刪除該邊;</p><p> 選項六:設(shè)置權(quán)值,點擊按鈕后輸入想添加的邊的兩個節(jié)點及權(quán)值即可給該邊賦予權(quán)值。</p><p> 3.弗洛伊德算法:對屏幕上已顯示的有向圖運行Floyd算法,輸出最短路徑及權(quán)值。</p><p><b> 七.附錄:測試數(shù)據(jù)&
20、lt;/b></p><p> 九.附C語言實現(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> //有向圖的當前頂點數(shù)目 </p><p> int vexnum; </p><p> //有向圖的當前邊數(shù)目 </p&g
23、t;<p> int arcnum; </p><p> //有向圖深度優(yōu)先已經(jīng)遍歷頂點數(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> //判斷頂點vPoint是否在有向圖存儲鏈表 </p><p> CGraphVertex* IsPointInList(CPoint vPoint); </p><p> //判斷頂點名vName是否在有向圖存儲鏈表 </p><p> CGraphVertex* I
28、sNameInList(CString vName);</p><p> //判斷邊(pBeginVex,pEndVex)是否在有向圖中 </p><p> BOOL IsEdgeExist(CGraphVertex* pBeginVex,CGraphVertex* pEndVex);</p><p> //判斷名為vName的頂點是否在有向圖中存儲鏈表中&l
29、t;/p><p> CGraphVertex* IsVexNameInList(CString vName);</p><p> //查找名為vName的頂點在有向圖中存儲鏈表中的地址</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的頂點</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> //插入頂點(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> //顯示有向圖頂點 </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> //手動刪除頂點</b></p><
41、;p> void AddVertsHand();</p><p><b> //手動添加頂點</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> 有向圖頂點的類:</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; //圖頂點顏色</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();//清空當前書控件所有節(jié)點 </p><p> m_Root=m_LeftTree.InsertItem("動態(tài)切換視圖");//插入根節(jié)點 </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;//在最后項之后 </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é)點</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é)點</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é)點</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> 最開始的樹及有向圖是由每個人獨立完成來熟悉操作和代碼,在做有向圖及弗洛伊德算法時,王樸和李元主要研究有向圖的建立及可視化,包赫和李崇飛主要研究弗洛伊德算法程序,出現(xiàn)問題時由4個人一起討論、試驗來解決,最后程序由大家共同做出。</p><p><b> 十一.課程總結(jié)</b></p>
114、<p> 通過兩周8天的程序設(shè)計課程,對工程的建立及算法的運算與嵌套有了更深刻的理解和操作能力,對團隊合作完成一個工程有了一定的了解,團隊合作意識加深了很多。</p><p> 完成了有向圖弗洛伊德算法找到最短路徑及權(quán)值的課程設(shè)計,對數(shù)據(jù)結(jié)構(gòu)有了進一步的接觸及操作,將書上的算法搬到程序的過程中加強了編程能力。</p><p> 十二.項目進度及成績評定</p>
115、<p> 課題名稱: </p><p> 完成者: </p><p> 1、設(shè)計進度及完成情況</p><p><b> 2、成績評定:</b></p><p> 設(shè)計成績: (教師填寫)<
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--弗洛伊德算法與最短路徑
- 數(shù)據(jù)結(jié)構(gòu),課程設(shè)計,校園最短路徑問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---圖頂點間最短路徑算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--dijkstra算法求最短路徑
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---交通旅游圖的最短路徑問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--用c#語言解決最短路徑的問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告——可視化走迷宮游戲
- 課程設(shè)計--最短路徑拯救007
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---關(guān)于最短路徑問題 和 二叉樹排序問題
- 【數(shù)據(jù)結(jié)構(gòu)課程設(shè)計】vc++商店選址最短路徑floyd算法設(shè)計實現(xiàn)(含源代碼)
- 系統(tǒng)全局最短路徑可視化試驗的機理研究.pdf
- 課程設(shè)計-故宮導游咨詢設(shè)計(最短路徑)
- 課程設(shè)計報告---最短路徑求最大利潤
- 數(shù)據(jù)結(jié)構(gòu)排序算法可視化的設(shè)計
- 最短路徑--拯救007課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---關(guān)鍵路徑
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-關(guān)鍵路徑
- 單元點最短路徑算法的實現(xiàn)課程設(shè)計
- 通信網(wǎng)最短路徑課程設(shè)計--基于c語言對d算法最短路徑的求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
評論
0/150
提交評論