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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  數(shù)據(jù)結構課程設計報告</p><p>  題目: 最小生成樹問題 </p><p>  院(系):計算機工程學院 </p><p>  學生姓名: XXX </p><p>  班級: XXX 學號:XXXXXXXXX </p>

2、;<p>  起迄日期: 2015.07.13-2015.07.24 </p><p>  指導教師: XXX XXX </p><p><b>  任務書</b></p><p><b>  最小生成樹問題</b></p><p>  [問題描述]在

3、n個城市之間建設網(wǎng)絡,只需保證連通即可,求最經(jīng)濟的架設方法。</p><p><b>  [設計要求]</b></p><p>  通過輸入建立一無向網(wǎng),存儲結構可以采用多種;</p><p>  要求分別采用普里姆算法和克魯斯卡爾算法實現(xiàn);</p><p>  若以圖形界面輸出可以適當加分。 </p&g

4、t;<p><b>  需求分析</b></p><p><b>  1.問題描述:</b></p><p>  該程序主要實現(xiàn)最小生成樹功能,在給定的中國鐵路網(wǎng)中,選擇城市,生成最小生成樹。此外,改程序實現(xiàn)了城市介紹,指定城市到其它城市的最短距離,指定城市之間的最短距離等圖論的基本操作。直觀、清晰的為用戶提供全國鐵路網(wǎng)的最基本情況

5、。</p><p>  該程序最具體的任務是最小生成樹的實現(xiàn),需要用到Prim算法和Kruskal算法實現(xiàn)。輸入指定的城市求出最小生成樹,方便查詢城市間的最短連通量。另外添加了顯示全國主要鐵路網(wǎng)的功能,在跳出的界面,選擇城市,程序會通過textBox控件顯示選定的城市的相關介紹。該程序實現(xiàn)了指定城市到其它城市之間的最短距離。通過在地圖上選擇城市,程序通過Dijkstra算法計算出指定城市到其它城市之間的最短距離,

6、并通過textBox控件顯示,一目了然。具有較強的人機和諧性。還可以實現(xiàn)指定城市之間的最短路,輸入兩個指定的城市,通過Floyd算法求出選定城市間的最短距離。并在圖形界面上標注要經(jīng)過的城市。</p><p><b>  2.基本功能:</b></p><p>  通過輸入建立一無向網(wǎng),存儲結構采用了鄰接矩陣。</p><p>  要求分別采用P

7、rim算法和Kruskal算法實現(xiàn),分別對應Prim.cs和Kruskal.cs。</p><p>  若以圖形界面輸出會適當加分。</p><p><b>  3.附加功能:</b></p><p> ?。?)城市的介紹,在輸出的全國鐵路網(wǎng)中,點擊相應的城市會出現(xiàn)對該城市相應的介紹。主要實現(xiàn)代碼在Map.cs中。</p><

8、;p> ?。?)指定城市到其它城市的最短距離,在地圖上點擊指定城市,程序會顯示指定城市到其它城市的最短距離。主要實現(xiàn)代碼在Dijkstra.cs中</p><p>  (3)指定的兩個城市之間的最短距離。在地圖中選擇兩個城市,程序會顯示這兩個城市之間的最短距離,并在地圖上顯示在這兩個城市之間經(jīng)過的城市。主要實現(xiàn)代碼在LeastRoad.cs中。</p><p><b>  

9、概要設計</b></p><p><b>  1.設計思路:</b></p><p>  首先,將城市和道路的主要信息,包括城市和道路的數(shù)量、城市的名稱、道路的相關信息存入文件中。在每個程序模塊中通過字節(jié)流StreamReader從文件中讀取字符,放入程序定義的存儲結構中。</p><p>  城市介紹。地圖所含城市的主要介紹和城市

10、名存入文本文件c5.txt中,在Map.cs中定義選定城市的關鍵字T,讀取文件中的內(nèi)容,尋找關鍵字T相對應的城市名,并在textBox1中輸出該城市的相關內(nèi)容。</p><p>  指定城市到其它城市的最短路。從文件c1.txt、c2.txt、c3.txt中分別讀取城市即道路的數(shù)量、城市名稱、道路的相關信息。存于指定的變量中。采用Dijkstra算法求出指定城市到其它城市的最短路,存入指定變量中。Dijkstra

11、算法用于求某個頂點到其余各頂點的最短路徑。</p><p>  指定城市之間的最短路。從文件c1.txt、c2.txt、c3.txt中分別讀取城市即道路的數(shù)量、城市名稱、道路的相關信息。存于指定的變量中。在給定的圖中選擇兩個城市,存入相應的變量中。采用Floyd算法求出指定城市之間的最短路徑。Floyd算法用于求每一對頂點之間的最短路徑。</p><p>  最小生成樹(Prim)。從文件

12、c1.txt、c2.txt、c3.txt中分別讀取城市即道路的數(shù)量、城市名稱、道路的相關信息,存于指定的變量中。在給定的圖中選擇城市,存入相應的變量中。采用Prim算法求出最小生成樹。Prim算法通過尋找最小的距離,生成最小生成樹。</p><p>  最小生成樹(Kruskal)。從文件c1.txt、c2.txt、c3.txt中分別讀取城市即道路的數(shù)量、城市名稱、道路的相關信息,存于指定的變量中。在給定的圖中選

13、擇城市,存入相應的變量中。采用Kruskal算法求出最小生成樹。Kruskal算法通過尋找最小的邊的操作,生成最小生成樹。</p><p><b>  2.數(shù)據(jù)結構設計:</b></p><p><b>  邏輯結構:圖狀</b></p><p>  該程序主要實現(xiàn)最小生成樹、指定頂點間的最短距離。題目的設計要求決定,圖的

14、存儲結構是最理想的選擇。其次,采用圖狀結構,更加適用于本程序,更形象化。便于整個程序代碼的編寫。為之后的功能設計提供方便。</p><p><b>  存儲結構:順序。</b></p><p>  鏈式存儲結構,具有操作靈活、簡便等特點。由于程序采用C#語言設計。在C#中沒有指針這一類型。雖然可以通過類的定義實現(xiàn)鏈式存儲,但操作過于麻煩,容易造成隱藏的錯誤。所以采用順

15、序存儲結構。采用順序存儲結構也可以實現(xiàn)圖的存儲,進而進行之后的一些列操作。相比于鏈式,順序存儲結構在一些算法的設計上,所消耗的時間可能會更少。</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>  操作結果:輸出指定城市到其余城市間的最短距離。</p><p>  Dijkstra.textBox1;</p><p>  初始條件:city數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p>  操作結果:將需要顯示的city信息顯示到textBox1控件中。</p

18、><p>  LeastRoad.Button3;</p><p>  初始條件:city數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p>  操作結果:輸出指定兩個城市之間的最短距離,在圖像中顯示指定兩城市間經(jīng)過的城市。</p><p>  Prim.Button2;</p><p>  初始條件:city數(shù)組已定義,

19、并存儲了文件中的數(shù)據(jù),i1<n。</p><p>  操作結果:根據(jù)選定的城市,輸出最小生成樹并在圖像中顯示。</p><p>  Kruskal.Button2;</p><p>  初始條件:city數(shù)組已定義,并存儲了文件中的數(shù)據(jù),i1<n。</p><p>  操作結果:根據(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ù)關系: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>  操作結果:輸出指定城市到其余城市間的最短距離。</p><p>  LeastRoad.Button3;</p><p>  初始條件:Railway數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p>  操作結果:輸出指定兩個城市之間的最短距離,在圖像中顯示指定兩城市間經(jīng)過的城市。</p><p>  Prim.Butto

23、n2;</p><p>  初始條件:Railway數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p>  操作結果:根據(jù)選定的城市,輸出最小生成樹并在圖像中顯示。</p><p>  Kruskal.Button2;</p><p>  初始條件:Railway數(shù)組已定義,并存儲了文件中的數(shù)據(jù)。</p><p>  

24、操作結果:根據(jù)選定的城市,輸出最小生成樹并在圖像中顯示。</p><p><b>  }</b></p><p><b>  3.軟件結構設計:</b></p><p>  圖2.1軟件結構設計</p><p><b>  詳細設計 </b></p><p&

25、gt;  1.定義程序中所用到的數(shù)據(jù)及數(shù)據(jù)結構</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]; //用于標記被訪問過的城市</p><p>  int[] td = new int[n]; //用于臨時記錄城市間的距離</p><p>  int[] dist = new int[n]; //記錄指定城市到其它城市的距離</p>

28、<p>  int[,] tag = new int[n, n]; //用于給鐵路標號</p><p>  Point []P = new Point[n+5]; //記錄城市的位置信息</p><p>  int[] visit = new int[n]; //標記城市是否被訪問過</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]; //記錄選定城市的標號</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) //將城市的相關信息寫入文本控件textBox2中</p><p><b>  {</b></p><p>  int flag2 = 0;</p><p>  if(Target==T) //檢測目標文本是否和給定文本相匹配</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(); //關閉字節(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++) //用于記錄城市的標號</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++) //記錄尋找的城市的標號</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++) //記錄指定城市到直接關聯(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; //標記指定城市已被訪

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; //記錄城市的標號

70、</p><p><b>  }</b></p><p><b>  }</b></p><p>  con[s[0]] = 1; //標記城市已被訪問過</p><p>  for (int j1 = 0; j1 < n; j1++) //標記指定城市到其它城市的距離</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++) //用于記錄城市的標號</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]; //定義坐標數(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]; //記錄指定城市的標號</p><p>  for (int k = 0; k < n; k++)</p><p><b>  {</b></p><p>

107、;  if (city[k] == T[0]) //記錄第一個城市的標號</p><p><b>  {</b></p><p><b>  x[0] = k;</b></p><p><b>  }</b></p><p>  if (city[k] == T[1])

108、 //記錄第二個城市的標號</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)過的城市的標號</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++) //標識出指定城市間的最短路</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++) //記錄城市標號</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++) //為選中的城市標號</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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論