數據結構的課設作業,要求如下。做不了整個的幫忙做一部分也成。謝謝了 輸管道鋪設施工最佳方案選擇【問題描述】某城市n個居民小區之間需要鋪設煤氣管道,需將n個小區的管道連通。設任意兩個小區間都有條件鋪設,但由于地理環境不同,所需經費各不相同。現需要為施工單位設計鋪設管道的最優施工方案,使總投資盡可能少。【基本要求】請設計一個軟件系統,利用圖形用戶界面模擬該城市居民小區鋪設管道的最優施工方案的設計過程。一 、輸入數據要求測試數據通過一個文本文件讀入。該數據文件的第1行為一個正整數n(n<=10),表示居民小區的數目。第2行為一個正整數m(m<=n*(n-1)/2),表示鋪設線路的數目。接下來n行字符串表示小區名稱,之后的m行中的每行用2個字符串和一個正整數,描述一條鋪設線路連接的兩個小區的名稱以及該線路的鋪設費用。鋪設費用為不超過100的正整數。二、輸出畫面的要求 用圖形方式動態模擬一個最優施工方案設計的全過程。為了便于控制畫面布局,可以讓用戶選擇幾種固定的小區數目,例如:6、8或10,但線路信息必須通過文本文件讀入。先顯示所有可能的候選鋪設線路(邊),生成時需換用不同顏色逐步顯示生長的邊和頂點。三、題目約定l 題目中給出的所有鋪設費用的單位均是“千元”;l 設施工單位用于鋪設管道的總投資沒有上限額度,但應盡可能節約。四、題目實現要求l 應用Prim算法,求最小生成樹,動態演示生成過程;l 應用Kruskal算法,求最小生成樹,動態演示生成過程。l 用戶界面提供Prim、Kruskal兩種方案,供用戶二選一。【測試數據樣例】46望京太陽華城武夷 望京 太陽 51望京 武夷 62望京 華城 97太陽 武夷 75太陽 華城 36華城 武夷 29【實現提示】1.首先將輸入文件給出的地圖信息轉換成一張帶權的無向圖。居民小區作為無向圖的頂點,小區間的鋪設線路作為無向圖的邊,鋪設費用作為邊上的權值。需要為無向圖選用易于操作的存儲方式。對于上面給定的輸入信息,可以構造如圖所示的無向圖。 為了便于操作,可以為每個居民小區分配一個編號,并利用一維數組實現小區編號與名稱的映射。即數組下標表示服務器的編號,數組元素的內容記錄居民小區名稱。 uskal算法屬于“貪心”算法,每次都從邊集的剩余邊中挑選權值最小者。Kruskal算法按權值非降序選邊,生成最小生成樹,即若某條邊是最小生成樹中第i小的邊,則它必須在比它權值小的第1至第(i-1)條邊全部判斷后,才進行判斷;若符合要求,則該邊加入到生成樹中。3. 由于對輸入的權值沒有要求,因此需要按權值對邊非降序排序,需要選用一種排序方法。4. Kruskal算法主要操作有:“合并子樹”和“檢查是否構成回路”。其中,檢查“某條邊(u,w)的加入是否構成回路”,可以通過“檢查u和w是否在同一個結點集合中”實現。對集合操作有:求集合并集、查找等(需要自己實現)。5. 為了便于控制顯示過程,約定:需要按“回車”鍵才開始動態顯示本次選中的一條邊和一個結點;再次按“回車”才開始動態顯示下一步過程。【擴展要求】在完成基本要求之后,本題可以從下面幾個方面擴展其功能:1.若施工單位有總投資上限額度限制,需要在工程未完成但已超出額度時,適時提示用戶(開發商)追加投資,得到認可后才能繼續,否則退出;2.在課程設計實驗報告中對Kruskal算法中權值排序算法的選擇做分析,說明選擇的理由;3.對Kruskal算法“合并子樹”和“判斷是否構成回路”的操作做進一步分析,探索其它優化解決方案(多多益善),實現之,并在報告中比較不同方案的優劣。【測試內容】第1周:明確Prim數據結構和算法框架、明確Kruskal的數據結構第2周:實現Prim算法、確定Kruskal算法解決方案第3周:實現Kruskal算法
熱心網友
先做好核心算法再做界面.核心算法是有無問題,你的問題是數據結構中的基礎問題,隨便找一個數據結構的書上都有大大把的現成算法,網上大把源碼, 仔細研究后可以少作修改,不建議自己想算法,時間和效果都比較差;界面問題是一個好與壞的問題,實現功能的難度很低,但是做好需要仔細下一些功夫
熱心網友
看誰有時間吧,真夠麻煩的,用C++倒簡單的多
熱心網友
做成代碼也太長了啊……暈樂,沒太長時間給你寫代碼,給你個思路吧。問題1:簡單說來就是構造最小生成樹的問題,數據結構因為是無向圖,使用數組感覺比較舒服。使用指針的話,感覺麻煩一些。把圖中每個節點作為一個樹的頂點,然后生成出n個哈夫曼樹(就是出哈夫曼編碼的那個樹),最后比較這n個樹的總長度(還是深度什么的,就是把樹的權值相加),既可得出圖的最小生成樹。不要被他那些輸入控制和顯示之類的亂七八糟的東西束縛思路,先做出核心算法,然后再擴充數據輸入,其實那些東西很簡單,就是調用幾個基類庫就可以實現。