計網與通訊課設最小代價演算法

2022-10-09 06:51:04 字數 3227 閱讀 2605

南京工程學院

通訊工程學院

課程設計說明書(**)

題目最小代價演算法

課程名稱計算機通訊與網路b

專業通訊工程學院

班級學生姓名

學號設計地點

指導教師

設計起止時間:2015 年6 月 8日至2015 年 6月12 日

目錄一.實驗目的3

二.實驗要求3

三.具體流程4

3.1.1dijkstra演算法分析4

3.1.2dijkstra演算法流程圖5

3.1.3執行結果截圖6

3.2.1bellman演算法分析7

3.2.2bellman演算法流程圖7

3.2.3執行結果截圖7

四. 課程設計總結8

五.源程式**8

六.參考文獻14

一. 實驗目的:

在學習《計算機通訊與網路》課程的基礎上,進一步深入理解計算機網路的體系結構、

各層主要功能和相關應用技術,提高tcp/ip網路的應用和設計能力;按照教學計畫的

要求,利用一周時間,綜合應用所學知識,設計具有一定功能的網路小軟體,培養學

生一定的自學能力和獨立分析問題、解決問題的能力,要求學生能通過獨立思考、查

閱工具書、參考文獻,提出自己的設計方案,找出設計中遇到問題的解決途徑。

完成路由演算法中的最小代價演算法:dijkstra和bellman兩個演算法。

二. 實驗要求:

(1)螢幕輸入結點個數、結點之間的鏈路及其代價,編寫程式,完成任意2個結點之間的最小代價的計算;

(2)基本任務為必做專案,附加任務為選做專案;

(3)對課程設計進行總結,撰寫課程設計報告。課程設計報告內容主要包括設計目的、設計要求、程式設計流程圖和執行結果,可手寫或列印。

設計任務:

1. 基本任務:單向鏈路。

鏈路代價2個方向都是相同的,計算最小代價。

2. 附加任務:雙向鏈路。

鏈路代價2個方向不相同,計算最小代價。

工作量要求:

1. 設計的程式流程圖;

2. c語言程式**;

3. 系統執行結果符合課程設計要求。

三. 具體流程:

3.1.1dijkstra演算法分析

需求和規格說明:

dijkstra演算法是典型最短路演算法,用於計算乙個節點到其他所有節點

的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到

終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計

算的節點很多,所以效率低。

演算法本身並不是按照我們的思維習慣——求解從原點到第乙個點最

短路徑,再到第二個點的最短路徑,直至最後求解完成到第n個點的

最短路徑,而是求解從原點出發的各有向路徑的從小到大的排列但是

演算法最終確實得到了從原點到圖中其餘各點的最短路徑,可以說這是

個副產品,對於演算法的終結條件也應該以求得了原點到圖中其餘各點

的最短路徑為宜。

dijkstra演算法是用來求任意兩個頂點之間的最短路徑。在該實驗中,

我們用鄰接矩陣來儲存圖。在該程式中設定乙個二維陣列來儲存任兩

個頂點之間的邊的權值。然後通過最短路徑的計算,輸入從任意兩個

頂點之間的最短路徑的大小。

3.1.2dijkstra演算法流程圖

3.1.3執行結果截圖

3.2.1bellman演算法分析

bellman-ford演算法是求含負權圖的單源最短路徑演算法,效率很低,但**很容易寫。即進行持續地鬆弛(原文是這麼寫的,為什麼要叫鬆弛,爭議很大),每次鬆弛把每條邊都更新一下,若n-1次鬆弛後還能更新,則說明圖中有負環,無法得出結果,否則就成功完成。bellman-ford演算法有乙個小優化:

每次鬆弛先設乙個標識flag,初值為false,若有邊更新則賦值為true,最終如果還是false則直接成功退出。

演算法描述:

1.初始化:將除源點外的所有頂點的最短距離估計值 d[v] ←+∞, d[s] ←0;

2.迭代求解:反覆對邊集e中的每條邊進行鬆弛操作,使得頂點集v中的每個頂點v的最短距離估計值逐步逼近其最短距離;(執行|v|-1次)

3.檢驗負權迴路:判斷邊集e中的每一條邊的兩個端點是否收斂。

如果存在未收斂的頂點,則演算法返回false,表明問題無解;否則演算法返回true,並且從源點可達的頂點v的最短距離儲存在 d[v]中。

適用範圍或條件:

1.單源最短路徑(從源點s到其它所有頂點v);

2.有向圖&無向圖(無向圖可以看作(u,v),(v,u)同屬於邊集e的有向圖);

3.邊權可正可負(如有負權迴路輸出錯誤提示);

4.差分約束系統;

3.2.2bellman演算法流程圖

3.2.3執行結果截圖

四. 課程設計總結

本次課程設計讓我對dijkstra和bellman演算法有了一定的了解,兩者都解決了最小代價這一演算法,有各自的特色也有不足之處。dijkstra演算法就是比較耗路徑,用選代方法效率高些。相對來說bellman演算法效率就頗為低些,迭代方法耗時的同時還要判斷負權迴路,但它操作更具體明了。

設計過程中不僅鍛鍊了自己修改程式的能力,更多是加強了對程式的思維,在與同學的交流合作中也鍛鍊到了自己。

五. 源程式**

dijkstra演算法程式**:

#include<>

#include<>

//dijkstra演算法實現函式

void dijkstra(int n,int v,int dist,int prev,int **cost)

else

}dist[v] = 0;

s[v] = 1;//源節點作為最初的s子集

for (i = 1; i < n; i++)

s[u] = 1;

計算加入新的節點後,更新路徑使得其產生代價最短

for (j = 1; j <= n; j++)

}}//展示最佳路徑函式

void showpath(int n,int v,int u,int *dist,int *prev)

//輸出路徑

printf("the best path is:\n");

for (j = count; j >= 1; j--)

printf("%d\n",u);

}//主函式,主要做輸入輸出工作

void main()

{ int i,j,t;

int n,v,u;

int **cost;//代價矩陣

int *dist;//最短路徑代價

通訊錄管理系統C語言課設

瀋陽工程學院 程式設計基礎 課程設計 設計題目 通訊錄管理系統 院別資訊學院班級 學生姓名 xx 學號 2012417105 2012417103 2012417102 指導教師 職稱副教授講師 起止日期 2013年5月27日起 至 2013年6月7日止 瀋陽工程學院 課程設計任務書 課程設計題目 ...

設施規劃與物流分析課設案例

目錄一 概述2 二 基本要素分析2 2.1柴油機機油幫浦結構及有關引數2 2.2作業單位劃分3 2.3柴油機機油幫浦生產工藝過程3 三 物流分析9 3.1產品工藝過程分析10 3.2 物流強度等級的劃分11 四 作業單位非物流相關分析14 4.1整理主因,給出理由編碼13 4.2 確定相互關係等級1...

生產計畫與控制課設沈理工

目錄第一章.企業簡介 2 第二章.需求 和生產能力平衡 6 第三章.綜合生產計畫的編制和優化 14 第四章.主生產計畫的制定 17 第五章.物料需求計畫 19 第六章.成批生產的生產作業計畫編制 23 第七章.作業排序 29 第八章.課程設計的體會 36 參考文獻 37 1.1企業簡介 上海凱貿實業...