版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告</p><p> 題目: 最小生成樹問題 </p><p> 院(系):計算機(jī)工程學(xué)院 </p><p> 學(xué)生姓名: XXX </p><p> 班級: XXX 學(xué)號:XXXXXXXXX </p>
2、;<p> 起迄日期: 2015.07.13-2015.07.24 </p><p> 指導(dǎo)教師: XXX XXX </p><p><b> 任務(wù)書</b></p><p><b> 最小生成樹問題</b></p><p> [問題描述]在
3、n個城市之間建設(shè)網(wǎng)絡(luò),只需保證連通即可,求最經(jīng)濟(jì)的架設(shè)方法。</p><p><b> [設(shè)計要求]</b></p><p> 通過輸入建立一無向網(wǎng),存儲結(jié)構(gòu)可以采用多種;</p><p> 要求分別采用普里姆算法和克魯斯卡爾算法實現(xiàn);</p><p> 若以圖形界面輸出可以適當(dāng)加分。 </p&g
4、t;<p><b> 需求分析</b></p><p><b> 1.問題描述:</b></p><p> 該程序主要實現(xiàn)最小生成樹功能,在給定的中國鐵路網(wǎng)中,選擇城市,生成最小生成樹。此外,改程序?qū)崿F(xiàn)了城市介紹,指定城市到其它城市的最短距離,指定城市之間的最短距離等圖論的基本操作。直觀、清晰的為用戶提供全國鐵路網(wǎng)的最基本情況
5、。</p><p> 該程序最具體的任務(wù)是最小生成樹的實現(xiàn),需要用到Prim算法和Kruskal算法實現(xiàn)。輸入指定的城市求出最小生成樹,方便查詢城市間的最短連通量。另外添加了顯示全國主要鐵路網(wǎng)的功能,在跳出的界面,選擇城市,程序會通過textBox控件顯示選定的城市的相關(guān)介紹。該程序?qū)崿F(xiàn)了指定城市到其它城市之間的最短距離。通過在地圖上選擇城市,程序通過Dijkstra算法計算出指定城市到其它城市之間的最短距離,
6、并通過textBox控件顯示,一目了然。具有較強(qiáng)的人機(jī)和諧性。還可以實現(xiàn)指定城市之間的最短路,輸入兩個指定的城市,通過Floyd算法求出選定城市間的最短距離。并在圖形界面上標(biāo)注要經(jīng)過的城市。</p><p><b> 2.基本功能:</b></p><p> 通過輸入建立一無向網(wǎng),存儲結(jié)構(gòu)采用了鄰接矩陣。</p><p> 要求分別采用P
7、rim算法和Kruskal算法實現(xiàn),分別對應(yīng)Prim.cs和Kruskal.cs。</p><p> 若以圖形界面輸出會適當(dāng)加分。</p><p><b> 3.附加功能:</b></p><p> ?。?)城市的介紹,在輸出的全國鐵路網(wǎng)中,點擊相應(yīng)的城市會出現(xiàn)對該城市相應(yīng)的介紹。主要實現(xiàn)代碼在Map.cs中。</p><
8、;p> ?。?)指定城市到其它城市的最短距離,在地圖上點擊指定城市,程序會顯示指定城市到其它城市的最短距離。主要實現(xiàn)代碼在Dijkstra.cs中</p><p> (3)指定的兩個城市之間的最短距離。在地圖中選擇兩個城市,程序會顯示這兩個城市之間的最短距離,并在地圖上顯示在這兩個城市之間經(jīng)過的城市。主要實現(xiàn)代碼在LeastRoad.cs中。</p><p><b>
9、概要設(shè)計</b></p><p><b> 1.設(shè)計思路:</b></p><p> 首先,將城市和道路的主要信息,包括城市和道路的數(shù)量、城市的名稱、道路的相關(guān)信息存入文件中。在每個程序模塊中通過字節(jié)流StreamReader從文件中讀取字符,放入程序定義的存儲結(jié)構(gòu)中。</p><p> 城市介紹。地圖所含城市的主要介紹和城市
10、名存入文本文件c5.txt中,在Map.cs中定義選定城市的關(guān)鍵字T,讀取文件中的內(nèi)容,尋找關(guān)鍵字T相對應(yīng)的城市名,并在textBox1中輸出該城市的相關(guān)內(nèi)容。</p><p> 指定城市到其它城市的最短路。從文件c1.txt、c2.txt、c3.txt中分別讀取城市即道路的數(shù)量、城市名稱、道路的相關(guān)信息。存于指定的變量中。采用Dijkstra算法求出指定城市到其它城市的最短路,存入指定變量中。Dijkstra
11、算法用于求某個頂點到其余各頂點的最短路徑。</p><p> 指定城市之間的最短路。從文件c1.txt、c2.txt、c3.txt中分別讀取城市即道路的數(shù)量、城市名稱、道路的相關(guān)信息。存于指定的變量中。在給定的圖中選擇兩個城市,存入相應(yīng)的變量中。采用Floyd算法求出指定城市之間的最短路徑。Floyd算法用于求每一對頂點之間的最短路徑。</p><p> 最小生成樹(Prim)。從文件
12、c1.txt、c2.txt、c3.txt中分別讀取城市即道路的數(shù)量、城市名稱、道路的相關(guān)信息,存于指定的變量中。在給定的圖中選擇城市,存入相應(yīng)的變量中。采用Prim算法求出最小生成樹。Prim算法通過尋找最小的距離,生成最小生成樹。</p><p> 最小生成樹(Kruskal)。從文件c1.txt、c2.txt、c3.txt中分別讀取城市即道路的數(shù)量、城市名稱、道路的相關(guān)信息,存于指定的變量中。在給定的圖中選
13、擇城市,存入相應(yīng)的變量中。采用Kruskal算法求出最小生成樹。Kruskal算法通過尋找最小的邊的操作,生成最小生成樹。</p><p><b> 2.數(shù)據(jù)結(jié)構(gòu)設(shè)計:</b></p><p><b> 邏輯結(jié)構(gòu):圖狀</b></p><p> 該程序主要實現(xiàn)最小生成樹、指定頂點間的最短距離。題目的設(shè)計要求決定,圖的
14、存儲結(jié)構(gòu)是最理想的選擇。其次,采用圖狀結(jié)構(gòu),更加適用于本程序,更形象化。便于整個程序代碼的編寫。為之后的功能設(shè)計提供方便。</p><p><b> 存儲結(jié)構(gòu):順序。</b></p><p> 鏈?zhǔn)酱鎯Y(jié)構(gòu),具有操作靈活、簡便等特點。由于程序采用C#語言設(shè)計。在C#中沒有指針這一類型。雖然可以通過類的定義實現(xiàn)鏈?zhǔn)酱鎯?,但操作過于麻煩,容易造成隱藏的錯誤。所以采用順
15、序存儲結(jié)構(gòu)。采用順序存儲結(jié)構(gòu)也可以實現(xiàn)圖的存儲,進(jìn)而進(jìn)行之后的一些列操作。相比于鏈?zhǔn)剑樞虼鎯Y(jié)構(gòu)在一些算法的設(shè)計上,所消耗的時間可能會更少。</p><p><b> 抽象數(shù)據(jù)類型:</b></p><p> 抽象數(shù)據(jù)類型鄰接矩陣的定義如下:</p><p> string[] city = new string[n];</p&g
16、t;<p><b> City{</b></p><p> 數(shù)據(jù)對象:數(shù)據(jù)對象:D={Ai}Ai∈city,i=1,2,3... ...,n,n≥0}</p><p><b> 基本操作:</b></p><p> Dijkstra.Button1;</p><p> 初始條
17、件:city數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p> 操作結(jié)果:輸出指定城市到其余城市間的最短距離。</p><p> Dijkstra.textBox1;</p><p> 初始條件:city數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p> 操作結(jié)果:將需要顯示的city信息顯示到textBox1控件中。</p
18、><p> LeastRoad.Button3;</p><p> 初始條件:city數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p> 操作結(jié)果:輸出指定兩個城市之間的最短距離,在圖像中顯示指定兩城市間經(jīng)過的城市。</p><p> Prim.Button2;</p><p> 初始條件:city數(shù)組已定義,
19、并存儲了文件中的數(shù)據(jù),i1<n。</p><p> 操作結(jié)果:根據(jù)選定的城市,輸出最小生成樹并在圖像中顯示。</p><p> Kruskal.Button2;</p><p> 初始條件:city數(shù)組已定義,并存儲了文件中的數(shù)據(jù),i1<n。</p><p> 操作結(jié)果:根據(jù)選定的城市,輸出最小生成樹并在圖像中顯示。<
20、;/p><p><b> }</b></p><p> int[,] Railway = new int[m, m];</p><p><b> Railway{</b></p><p> 數(shù)據(jù)對象:D={Bi}Bi∈city,i=1,2,3... ...,n,n≥0}</p>&
21、lt;p> 數(shù)據(jù)關(guān)系:R={<Bi-1,Bi>}Bi-1,Bi∈Way,i=1,2,3... ...,n,n≥0}</p><p><b> 基本操作:</b></p><p> Dijkstra.Button1;</p><p> 初始條件:Railway數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p>&l
22、t;p> 操作結(jié)果:輸出指定城市到其余城市間的最短距離。</p><p> LeastRoad.Button3;</p><p> 初始條件:Railway數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p> 操作結(jié)果:輸出指定兩個城市之間的最短距離,在圖像中顯示指定兩城市間經(jīng)過的城市。</p><p> Prim.Butto
23、n2;</p><p> 初始條件:Railway數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p> 操作結(jié)果:根據(jù)選定的城市,輸出最小生成樹并在圖像中顯示。</p><p> Kruskal.Button2;</p><p> 初始條件:Railway數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p>
24、操作結(jié)果:根據(jù)選定的城市,輸出最小生成樹并在圖像中顯示。</p><p><b> }</b></p><p><b> 3.軟件結(jié)構(gòu)設(shè)計:</b></p><p> 圖2.1軟件結(jié)構(gòu)設(shè)計</p><p><b> 詳細(xì)設(shè)計 </b></p><p&
25、gt; 1.定義程序中所用到的數(shù)據(jù)及數(shù)據(jù)結(jié)構(gòu)</p><p><b> 數(shù)據(jù):</b></p><p> string T; //用于記錄查詢的程序</p><p> string[] T = new string[1]; //用于存儲選中的城市</p><p> string[] city = n
26、ew string[n]; //用戶存儲城市信息</p><p> int[,] Railway = new int[m, m]; //用于存儲鐵路信息</p><p> string city1 //用于記錄弧頭城市</p><p> string city2 //用于記錄弧尾城市</p><p> Cont
27、rol c //用于遍歷控件</p><p> int[] con = new int[n]; //用于標(biāo)記被訪問過的城市</p><p> int[] td = new int[n]; //用于臨時記錄城市間的距離</p><p> int[] dist = new int[n]; //記錄指定城市到其它城市的距離</p>
28、<p> int[,] tag = new int[n, n]; //用于給鐵路標(biāo)號</p><p> Point []P = new Point[n+5]; //記錄城市的位置信息</p><p> int[] visit = new int[n]; //標(biāo)記城市是否被訪問過</p><p> bool[, ,] path
29、= new bool[n, n, n]; //記錄兩城市間通過的城市</p><p> Pen pen = new Pen(Color.Green, 5); //定義畫筆信息</p><p> string[] Target = textBox1.Lines; //記錄從textBox1中獲取的信息</p><p> int[] Select
30、ed = new int[n]; //記錄選定城市的標(biāo)號</p><p> int[] Pcity = new int[i1]; //用于存儲選中的城市</p><p> int[] Pdistance = new int[i1]; //用于存儲距離</p><p> int[,] ln = new int[n, n]; //記錄道路信
31、息</p><p> int[] set = new int[n]; //記錄邊的弧頭、弧尾</p><p><b> 鄰接矩陣:</b></p><p> int n; //用于記錄城市的數(shù)目</p><p> int m; //用于記錄道路的數(shù)目</p><p>
32、string[] city = new string[n]; //用戶存儲城市信息</p><p> int[,] Railway = new int[m, m]; //用于存儲鐵路信息</p><p> 2.主函數(shù)和其他函數(shù)的偽碼算法:</p><p><b> 查詢城市信息按鈕:</b></p><p&
33、gt; private void button1_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> textBox1.Clear();</p><p> foreach (Control c in this.Controls) //遍歷程序內(nèi)的控件</
34、p><p><b> {</b></p><p> if (c is GroupBox)</p><p><b> {</b></p><p> foreach (Control d in c.Controls) //遍歷GroupBox1中的所有控件</p><p&g
35、t;<b> {</b></p><p> if (d is RadioButton)</p><p><b> {</b></p><p> if (((RadioButton)d).Checked == true)</p><p><b> {</b></p
36、><p> T = ((RadioButton)d).Text; //獲取指定RadioButton空間的Text屬性值</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p
37、><b> }</b></p><p><b> }</b></p><p> textBox1.Text += T; //在文本控件中顯示文本信息</p><p> string Target;</p><p> textBox2.Clear(); //清空textBo
38、x2中的文本信息</p><p> StreamReader filestream1 = new StreamReader("D:/c5.txt", Encoding.Default); //從指定文本文件中讀取字符</p><p> Target = filestream1.ReadLine();</p><p> while(Ta
39、rget!=null) //將城市的相關(guān)信息寫入文本控件textBox2中</p><p><b> {</b></p><p> int flag2 = 0;</p><p> if(Target==T) //檢測目標(biāo)文本是否和給定文本相匹配</p><p><b> {</b>
40、;</p><p> for (; ; )</p><p><b> {</b></p><p> Target = filestream1.ReadLine();</p><p> if (Target == "###") </p><p><b>
41、 break;</b></p><p><b> else</b></p><p><b> {</b></p><p> textBox2.Text += Target;</p><p><b> }</b></p><p><
42、;b> }</b></p><p> flag2 = 1;</p><p><b> }</b></p><p> if (flag2 == 1) //是否跳出循環(huán)</p><p><b> break;</b></p><p> Targ
43、et = filestream1.ReadLine();</p><p><b> }</b></p><p> filestream1.Close(); //關(guān)閉字節(jié)流</p><p><b> }</b></p><p> 指定城市到其余城市最短距離按鈕:</p>&
44、lt;p> private void button1_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> textBox1.Clear(); //清空textBox1中的原有信息</p><p> StreamReader filestream1 = n
45、ew StreamReader("D:/c1.txt", Encoding.Default); //從c1.txt文件中讀取信息</p><p> int n = int.Parse(filestream1.ReadLine());</p><p> int m = int.Parse(filestream1.ReadLine());</p>&
46、lt;p> filestream1.Close();</p><p> StreamReader filestream2 = new StreamReader("D:/c2.txt", Encoding.Default); //從c2.txt文件中讀取信息</p><p> string[] city = new string[n];</p>
47、;<p> for (int i = 0; i < n; i++)</p><p><b> {</b></p><p> city[i] = filestream2.ReadLine();</p><p><b> }</b></p><p> filestream2
48、.Close();</p><p> StreamReader filestream3 = new StreamReader("D:/c3.txt", Encoding.Default); //從c3.txt文件中讀取信息</p><p> int[,] Railway = new int[m, m];</p><p> int[,]
49、 tag = new int[n, n];</p><p> for (int i = 0; i < m; i++)</p><p><b> {</b></p><p> for (int j = 0; j < m; j++)</p><p><b> {</b></p&
50、gt;<p> Railway[i, j] = 10000;</p><p><b> }</b></p><p><b> }</b></p><p> for (int i = 0; i < n; i++) //用于記錄城市的標(biāo)號</p><p><b&g
51、t; {</b></p><p> for (int j = 0; j < n; j++)</p><p><b> {</b></p><p> tag[i, j] = 0;</p><p><b> }</b></p><p><b>
52、; }</b></p><p> string city1, city2;</p><p> for (int i = 0; i < m; i++) //獲取城市間距離信息</p><p><b> {</b></p><p> city1 = filestream3.ReadLine(
53、); //獲取弧頭城市的信息</p><p> city2 = filestream3.ReadLine(); //獲取弧尾城市的信息</p><p> int flag = 0;</p><p> for (int j = 0; j < n; j++)</p><p><b> {</b>&l
54、t;/p><p> for (int k = 0; k < n; k++)</p><p><b> {</b></p><p> if (city1 == city[j] && city2 == city[k])</p><p><b> {</b></p>
55、<p> Railway[j, k] = Railway[k, j] = Convert.ToInt32(filestream3.ReadLine());</p><p> tag[j, k] = tag[k, j] = i;</p><p><b> flag = 1;</b></p><p><b> brea
56、k;</b></p><p><b> }</b></p><p><b> }</b></p><p> if (flag == 1)</p><p><b> {</b></p><p><b> break;<
57、/b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> filestream3.Close();</p><p> foreach (Control c
58、in this.Controls) //遍歷所有的控件,尋找groupBox1</p><p><b> {</b></p><p> if (c is GroupBox)</p><p><b> {</b></p><p> foreach (Control d in c.Cont
59、rols) //遍歷groupBox1中的控件,尋找RadioButton控件</p><p><b> {</b></p><p> if (d is RadioButton)</p><p><b> {</b></p><p> if (((RadioButton)d).Chec
60、ked == true)</p><p><b> {</b></p><p> T[0] = ((RadioButton)d).Text; //記錄尋找的RadioButton的Text屬性值</p><p><b> }</b></p><p><b> }</b&
61、gt;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> int [] r=new int[1];</p><p> int[] s = new int[1];&
62、lt;/p><p> int[] con = new int[n];</p><p> int[] td = new int[n];</p><p> for (int i = 0; i < n; i++) //記錄尋找的城市的標(biāo)號</p><p><b> {</b></p><p&
63、gt; if (city[i] == T[0])</p><p><b> {</b></p><p><b> r[0] = i;</b></p><p><b> }</b></p><p><b> }</b></p><
64、;p> for (int i = 0; i < n; i++) //記錄城市是否被訪問過</p><p><b> {</b></p><p> con[i] = 0;</p><p><b> }</b></p><p> int[] dist = new int[n]
65、; //記錄指定城市到其它城市的距離</p><p> for (int i = 0; i < n; i++)</p><p><b> {</b></p><p> dist[i] = 10000;</p><p><b> }</b></p><p>
66、 for (int i = 0; i < n; i++) //記錄指定城市到直接關(guān)聯(lián)城市的距離</p><p><b> {</b></p><p> if (Railway[r[0], i] < 10000)</p><p><b> {</b></p><p> di
67、st[i] = Railway[r[0], i];</p><p><b> }</b></p><p><b> }</b></p><p> dist[r[0]] = 0; //指定城市到自己的距離為0</p><p> con[r[0]] = 1; //標(biāo)記指定城市已被訪
68、問過</p><p> for (int i = 1; i < n; i++)</p><p><b> {</b></p><p> int mini = 10000;</p><p> for (int j = 0; j < n; j++) //尋找最小距離</p><p
69、><b> {</b></p><p> if (dist[j] < mini && con[j] == 0)</p><p><b> {</b></p><p> mini = dist[j];</p><p> s[0] = j; //記錄城市的標(biāo)號
70、</p><p><b> }</b></p><p><b> }</b></p><p> con[s[0]] = 1; //標(biāo)記城市已被訪問過</p><p> for (int j1 = 0; j1 < n; j1++) //標(biāo)記指定城市到其它城市的距離</p
71、><p><b> {</b></p><p> td[j1] = 10000;</p><p><b> }</b></p><p> for (int j2 = 0; j2 < n; j2++)</p><p><b> {</b><
72、;/p><p> if (Railway[s[0], j2] < 10000)</p><p><b> {</b></p><p> td[j2] = Railway[s[0], j2];</p><p><b> }</b></p><p><b>
73、 }</b></p><p> for (int j3 = 0; j3 < n; j3++) //更新最小距離</p><p><b> {</b></p><p> if (con[j3] == 0 && mini < 10000 && td[j3] < 10000 &
74、amp;& mini + td[j3] < dist[j3])</p><p><b> {</b></p><p> dist[j3] = mini + td[j3];</p><p><b> }</b></p><p><b> }</b></
75、p><p><b> }</b></p><p> for (int j4 = 0; j4 < n; j4++) //輸出指定城市到其它城市的最小距離</p><p><b> {</b></p><p> if (T[0] == city[j4])</p><p
76、><b> {</b></p><p><b> continue;</b></p><p><b> }</b></p><p> textBox1.Text += T[0]+"->"+city[j4] + ":" + dist[j4] +
77、 "KM"+"\r\n";</p><p><b> }</b></p><p><b> }</b></p><p> 指定城市之間最短距離按鈕:</p><p> private void button3_Click(object sender,
78、EventArgs e)</p><p><b> {</b></p><p> Graphics g = this.groupBox1.CreateGraphics(); //在groupBox1中創(chuàng)建Graphics對象</p><p> textBox3.Clear(); //清空textBox3中原有的信息</p
79、><p> StreamReader filestream1 = new StreamReader("D:/c1.txt", Encoding.Default); //從c1.txt文件中讀取信息</p><p> int n = int.Parse(filestream1.ReadLine());</p><p> int m = i
80、nt.Parse(filestream1.ReadLine());</p><p> filestream1.Close();</p><p> StreamReader filestream2 = new StreamReader("D:/c2.txt", Encoding.Default); //從c2.txt文件中讀取信息</p><
81、;p> string[] city = new string[n];</p><p> for (int i = 0; i < n; i++)</p><p><b> {</b></p><p> city[i] = filestream2.ReadLine();</p><p><b>
82、 }</b></p><p> filestream2.Close();</p><p> StreamReader filestream3 = new StreamReader("D:/c3.txt", Encoding.Default); //從c3.txt文件中讀取信息</p><p> int[,] Railw
83、ay = new int[m, m];</p><p> int[,] tag = new int[n, n];</p><p> for (int i = 0; i < m; i++)</p><p><b> {</b></p><p> for (int j = 0; j < m; j++)&l
84、t;/p><p><b> {</b></p><p> Railway[i, j] = 10000;</p><p><b> }</b></p><p><b> }</b></p><p> for (int i = 0; i < n;
85、 i++) //用于記錄城市的標(biāo)號</p><p><b> {</b></p><p> for (int j = 0; j < n; j++)</p><p><b> {</b></p><p> tag[i, j] = 0;</p><p><
86、;b> }</b></p><p><b> }</b></p><p> string city1, city2;</p><p> for (int i = 0; i < m; i++) //獲取城市間距離信息</p><p><b> {</b><
87、/p><p> city1 = filestream3.ReadLine(); //獲取弧頭城市的信息</p><p> city2 = filestream3.ReadLine(); //獲取弧尾城市的信息</p><p> int flag = 0;</p><p> for (int j = 0; j < n; j
88、++)</p><p><b> {</b></p><p> for (int k = 0; k < n; k++)</p><p><b> {</b></p><p> if (city1 == city[j] && city2 == city[k])</p
89、><p><b> {</b></p><p> Railway[j, k] = Railway[k, j] = Convert.ToInt32(filestream3.ReadLine());</p><p> tag[j, k] = i;</p><p><b> flag = 1;</b>
90、</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if (flag == 1)</p><p><b> {</b></p
91、><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> filestream3.Close();</p
92、><p> Point []P = new Point[n+5]; //定義坐標(biāo)數(shù)組,記錄城市的位置信息</p><p> int X1, Y1;</p><p> int z = 0;</p><p> foreach (Control c in this.Controls) //遍歷圖中所有的控件,尋找groupBox控件
93、</p><p><b> {</b></p><p> if (c is GroupBox)</p><p><b> {</b></p><p> foreach (Control d in c.Controls) //遍歷groupBox中的控件,尋找RadioButton控件&
94、lt;/p><p><b> {</b></p><p> if (d is RadioButton)</p><p><b> {</b></p><p> X1 = ((RadioButton)d).Location.X;</p><p> Y1 = ((Radio
95、Button)d).Location.Y;</p><p> P[z++] = new Point(X1, Y1); //記錄城市的位置信息</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></
96、p><p><b> }</b></p><p> int[,] dist = new int[n, n]; //記錄城市之間的距離</p><p> int[] visit = new int[n]; //記錄城市是否被訪問</p><p> bool[, ,] path = new bool[n, n
97、, n]; //記錄兩城市之間通過的城市</p><p> for (int x1 = 0; x1 < n; x1++) //初始化path數(shù)組</p><p><b> {</b></p><p> for (int y1 = 0; y1 < n; y1++)</p><p><b&
98、gt; {</b></p><p> for (int z1 = 0; z1 < n; z1++)</p><p><b> {</b></p><p> path[x1, y1, z1] = false;</p><p><b> }</b></p>&l
99、t;p><b> }</b></p><p><b> }</b></p><p> for (int v = 0; v < n; v++) //將城市間的距離信息輸入到dist數(shù)組中</p><p><b> {</b></p><p> for
100、(int w = 0; w < n; w++)</p><p><b> {</b></p><p> dist[v, w] = Railway[v, w];</p><p> if (Railway[v, w] < 10000)</p><p><b> {</b></p
101、><p> path[v, w, v] = true;</p><p> path[v, w, w] = true;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
102、;<p> for (int u = 0; u < n; u++) //尋找城市間的最短距離</p><p><b> {</b></p><p> for (int v = 0; v < n; v++)</p><p><b> {</b></p><p>
103、 for (int w = 0; w < n; w++)</p><p><b> {</b></p><p> if (dist[v, u] < 10000 && dist[u, w] < 10000 && dist[v, u] + dist[u, w] < dist[v, w])</p>
104、<p><b> {</b></p><p> dist[v, w] = dist[v, u] + dist[u, w];</p><p> for (int r = 0; r < n; r++) //刷新path數(shù)組</p><p><b> {</b></p><p&g
105、t; path[v, w, r] = path[v, u, r] | path[u, w, r];</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b&g
106、t;</p><p><b> }</b></p><p> int[] x = new int[2]; //記錄指定城市的標(biāo)號</p><p> for (int k = 0; k < n; k++)</p><p><b> {</b></p><p>
107、; if (city[k] == T[0]) //記錄第一個城市的標(biāo)號</p><p><b> {</b></p><p><b> x[0] = k;</b></p><p><b> }</b></p><p> if (city[k] == T[1])
108、 //記錄第二個城市的標(biāo)號</p><p><b> {</b></p><p><b> x[1] = k;</b></p><p><b> }</b></p><p><b> }</b></p><p> te
109、xtBox3.Text += dist[x[0], x[1]]+"KM"; //在textBox3中顯示指定城市間的最短距離</p><p> int[] tag2 = new int[n]; //記錄指定城市間經(jīng)過的城市的標(biāo)號</p><p> int i2 = 0;</p><p> for (int i1 = 0; i1
110、< n; i1++)</p><p><b> {</b></p><p> if (path[x[0], x[1], i1])</p><p><b> {</b></p><p> tag2[i2++] = i1;</p><p><b> }&
111、lt;/b></p><p><b> }</b></p><p> Pen pen = new Pen(Color.Green, 5); //定義畫筆信息</p><p> for (int x2 = 0; x2 < i2; x2++) //標(biāo)識出指定城市間的最短路</p><p><
112、;b> {</b></p><p> for (int y2 = x2; y2 < i2; y2++)</p><p><b> {</b></p><p> if (Railway[tag2[x2], tag2[y2]] < 10000)</p><p><b> {&
113、lt;/b></p><p> g.DrawLine(pen, P[z-tag2[x2]-1], P[z-tag2[y2]-1]);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
114、;<p> button1.Enabled = false;</p><p> button2.Enabled = false;</p><p><b> }</b></p><p> 最小生成樹(Prim)按鈕:</p><p> private void button2_Click(objec
115、t sender, EventArgs e)</p><p><b> {</b></p><p> StreamReader filestream1 = new StreamReader("D:/c1.txt", Encoding.Default); //從c1.txt文件中讀取信息</p><p> int
116、n = int.Parse(filestream1.ReadLine());</p><p> int m = int.Parse(filestream1.ReadLine());</p><p> filestream1.Close();</p><p> StreamReader filestream2 = new StreamReader("D
117、:/c2.txt", Encoding.Default); //從c2.txt文件中讀取信息</p><p> string[] city = new string[n];</p><p> for (int i = 0; i < n; i++)</p><p><b> {</b></p><p
118、> city[i] = filestream2.ReadLine();</p><p><b> }</b></p><p> filestream2.Close();</p><p> StreamReader filestream3 = new StreamReader("D:/c3.txt", Encod
119、ing.Default); //從c3.txt文件中讀取信息</p><p> int[,] Railway = new int[m, m];</p><p> int[,] tag = new int[n, n];</p><p> for (int i = 0; i < m; i++) //初始化鐵路信息</p><p
120、><b> {</b></p><p> for (int j = 0; j < m; j++)</p><p><b> {</b></p><p> Railway[i, j] = 10000;</p><p><b> }</b></p>
121、<p><b> }</b></p><p> for (int i = 0; i < n; i++) //記錄城市標(biāo)號</p><p><b> {</b></p><p> for (int j = 0; j < n; j++)</p><p><b
122、> {</b></p><p> tag[i, j] = 0;</p><p><b> }</b></p><p><b> }</b></p><p> string city1, city2;</p><p> for (int i = 0
123、; i < m; i++) //獲取城市間距離信息</p><p><b> {</b></p><p> city1 = filestream3.ReadLine(); //獲取弧頭城市的信息</p><p> city2 = filestream3.ReadLine(); //獲取弧尾城市的信息</p&g
124、t;<p> int flag = 0;</p><p> for (int j = 0; j < n; j++)</p><p><b> {</b></p><p> for (int k = 0; k < n; k++)</p><p><b> {</b>
125、</p><p> if (city1 == city[j] && city2 == city[k])</p><p><b> {</b></p><p> Railway[j, k] = Railway[k, j] = Convert.ToInt32(filestream3.ReadLine());</p>
126、<p> tag[j, k] = i;</p><p><b> flag = 1;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p&g
127、t;<p> if (flag == 1)</p><p><b> {</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p>&l
128、t;p><b> }</b></p><p> filestream3.Close();</p><p> Point []P = new Point[n+5];</p><p> int X1, Y1;</p><p> int z = 0;</p><p> foreach
129、(Control c in this.Controls) //遍歷所有的控件,尋找groupBox1</p><p><b> {</b></p><p> if (c is GroupBox)</p><p><b> {</b></p><p> foreach (Control
130、d in c.Controls) //遍歷groupBox1中的控件,尋找RadioButton控件</p><p><b> {</b></p><p> if (d is RadioButton)</p><p><b> {</b></p><p> X1 = ((RadioBu
131、tton)d).Location.X;</p><p> Y1 = ((RadioButton)d).Location.Y;</p><p> P[z++] = new Point(X1, Y1); //記錄尋找的RadioButton的Text屬性值</p><p><b> }</b></p><p>&
132、lt;b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if (i1 > n) //錯誤輸入提示</p><p><b> {</b></p><p>
133、 MessageBox.Show("沒有足夠的城市數(shù)量!");</p><p><b> }</b></p><p> string[] Target = textBox1.Lines; //獲取textBox1中的信息</p><p> Target = textBox1.Text.Replace("
134、;\r\n", ",").Split(','); </p><p> int[] Selected = new int[n];</p><p> for (int i = 0; i < i1; i++) //為選中的城市標(biāo)號</p><p><b> {</b></p&
135、gt;<p> for (int j = 0; j < n; j++)</p><p><b> {</b></p><p> if (Target[i] == city[j])</p><p><b> {</b></p><p> Selected[i] = j;&
136、lt;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> int[] Pcity = new int[i1]; //用于存儲選中的城市</p><p> int[]
137、 Pdistance = new int[i1]; //用于存儲距離</p><p> for (int i = 0; i < i1; i++) //Prim算法求最小生成樹</p><p><b> {</b></p><p> Pcity[i] = Selected[0];</p><p>
138、 int flag = 0; </p><p> for (int j = 0; j < i1; j++)</p><p><b> {</b></p><p> if (Railway[Pcity[i], Selected[j]] < 10000 && Selected[i] ==
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計--最小生成樹問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--最小生成樹
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-最小生成樹
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---最小生成樹問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--最小生成樹
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計java--最小生成樹
- 最小生成樹課程設(shè)計
- 最小生成樹課程設(shè)計
- 最小生成樹課程設(shè)計
- 最小生成樹課程設(shè)計 (2)
- 最小生成樹求解課程設(shè)計報告
- 普里姆算法生成最小生成樹課程設(shè)計
- 徐州工程學(xué)院數(shù)據(jù)結(jié)構(gòu)最小生成樹實驗文檔
- 數(shù)據(jù)結(jié)構(gòu),最小生成樹克魯斯卡爾算法的實現(xiàn)
- 課程設(shè)計---克魯斯卡爾算法求最小生成樹
- 4最小生成樹
- 4最小生成樹
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 圖的遍歷和生成樹求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-----最小套圈設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---圖的遍歷和生成樹求解
評論
0/150
提交評論