版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--弗洛伊德算法與最短路徑
- 數(shù)據(jù)結(jié)構(gòu),課程設(shè)計(jì),校園最短路徑問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---圖頂點(diǎn)間最短路徑算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--dijkstra算法求最短路徑
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---交通旅游圖的最短路徑問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--用c#語言解決最短路徑的問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告——可視化走迷宮游戲
- 課程設(shè)計(jì)--最短路徑拯救007
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---關(guān)于最短路徑問題 和 二叉樹排序問題
- 【數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)】vc++商店選址最短路徑floyd算法設(shè)計(jì)實(shí)現(xiàn)(含源代碼)
- 系統(tǒng)全局最短路徑可視化試驗(yàn)的機(jī)理研究.pdf
- 課程設(shè)計(jì)-故宮導(dǎo)游咨詢設(shè)計(jì)(最短路徑)
- 課程設(shè)計(jì)報(bào)告---最短路徑求最大利潤
- 數(shù)據(jù)結(jié)構(gòu)排序算法可視化的設(shè)計(jì)
- 最短路徑--拯救007課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---關(guān)鍵路徑
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-關(guān)鍵路徑
- 單元點(diǎn)最短路徑算法的實(shí)現(xiàn)課程設(shè)計(jì)
- 通信網(wǎng)最短路徑課程設(shè)計(jì)--基于c語言對d算法最短路徑的求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
評論
0/150
提交評論