久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 數(shu)據結構(gou) 圖的概念及怎么實(shi)現

數(shu)據結構 圖的概(gai)念及怎么實現 時(shi)間(jian):2018-01-25      來源:未知

本(ben)文主要想(xiang)闡(chan)述(shu)有關圖(tu)的(de)(de)一些基(ji)本(ben)概念,及基(ji)本(ben)的(de)(de)實(shi)(shi)現方法(fa)(fa)。圖(tu)論(lun)算(suan)法(fa)(fa)是(shi)數據結構中(zhong)比線(xian)性(xing)表和(he)樹(shu)更為(wei)復雜的(de)(de)算(suan)法(fa)(fa),但并不(bu)影響它在實(shi)(shi)踐中(zhong)的(de)(de)重(zhong)要作用,和(he)實(shi)(shi)際生活中(zhong)的(de)(de)應用,所以掌握這(zhe)種算(suan)法(fa)(fa)還(huan)是(shi)蠻有用和(he)有趣的(de)(de)。在這(zhe)里,我會給(gei)大家介(jie)(jie)紹幾個生活中(zhong)發生的(de)(de)問題,他們(men)可以轉(zhuan)化成圖(tu)論(lun)問題。然后再給(gei)大家介(jie)(jie)紹一下(xia)圖(tu)的(de)(de)c語言基(ji)本(ben)實(shi)(shi)現。

一、圖的基(ji)本(ben)概念(nian)

概念1:圖(tu)(tu)。一(yi)個圖(tu)(tu)(graph)G=(V,E)由(you)頂點(dian)(vertex)集和(he)邊(bian)(bian)(edge)集組成(cheng)。每一(yi)條變(bian)就是一(yi)個點(dian)對(dui)(v,w),其中v,w∈V。有(you)(you)時(shi)也(ye)把(ba)邊(bian)(bian)稱(cheng)(cheng)作弧。如果點(dian)對(dui)是有(you)(you)序的,那(nei)么圖(tu)(tu)就叫(jiao)(jiao)做是有(you)(you)向的。有(you)(you)向的圖(tu)(tu)有(you)(you)時(shi)也(ye)叫(jiao)(jiao)有(you)(you)向圖(tu)(tu)。頂點(dian)v和(he)w鄰(lin)接當且僅(jin)當(v,w)∈E。點(dian)對(dui)可(ke)以無向,我(wo)們稱(cheng)(cheng)作無向圖(tu)(tu)。有(you)(you)時(shi)候邊(bian)(bian)還具有(you)(you)第三種成(cheng)分,稱(cheng)(cheng)作權或值。

圖(Graph)也可以形(xing)式(shi)化描述為(wei)(wei)(wei): Graph = (V,E) 其中,V={Vi | Vi ∈datatype, i=0,1,……,n-1} 是圖中元素Vi(稱為(wei)(wei)(wei)頂點(dian)Vertex )的集(ji)合,n=0時,V為(wei)(wei)(wei)空集(ji),記為(wei)(wei)(wei)φ。

概念(nian)2:強連(lian)通(tong)的。如果在(zai)(zai)一(yi)個無向圖中從每一(yi)個頂點到每個其他(ta)頂點都存在(zai)(zai)一(yi)條路徑,則稱該(gai)無向圖是連(lian)通(tong)的。具有這樣性質的有向圖稱為(wei)是強連(lian)通(tong)的。

概念3:頂(ding)(ding)點(dian)(dian)的(de)度(du)(du)(Degree)。用(yong)圖(tu)形(xing)來說明(ming)。設E為(wei)無向圖(tu)G中邊的(de)集合,V、V’為(wei)圖(tu)中的(de)頂(ding)(ding)點(dian)(dian)。若(V,V’)∈E,則(ze)稱(cheng)V和V’互為(wei)鄰接(jie)點(dian)(dian),或稱(cheng)V與V’相(xiang)(xiang)鄰接(jie),邊(V,V’)與V、V’相(xiang)(xiang)關聯(lian)。某頂(ding)(ding)點(dian)(dian)V的(de)度(du)(du)記為(wei)D(V),代表與V相(xiang)(xiang)關聯(lian)的(de)邊的(de)條數(shu)。如:

數據結構圖

D(V1)=3 ,D(V2)=2。

又設A為有向圖G中弧的集合,若∈A,則稱V鄰接到V’,V’鄰接自V,與V、V’相關聯。頂點V的入度記為ID(V),是圖中以V為弧頭的弧的條數;而頂點V的出度記為OD(V),是圖中以V為弧尾的弧的條數。

頂點V的度D(V)=ID(V)+OD(V)。如:

數據結構圖

ID(V2)=2,OD(V2)=2,故D(V2)=4。

現實生活中能夠用圖進行模(mo)擬的實例:

比如(ru)(ru)航空系(xi)統。每個(ge)(ge)機(ji)場是(shi)(shi)一(yi)(yi)(yi)個(ge)(ge)頂點(dian),在由(you)兩個(ge)(ge)頂點(dian)表(biao)示(shi)的(de)(de)(de)(de)機(ji)場間如(ru)(ru)果存在一(yi)(yi)(yi)條(tiao)直(zhi)達航線(xian)(xian),那么這兩個(ge)(ge)頂點(dian)就用(yong)一(yi)(yi)(yi)條(tiao)邊(bian)連(lian)(lian)接。邊(bian)可(ke)(ke)以有(you)一(yi)(yi)(yi)個(ge)(ge)權(quan),表(biao)示(shi)時間、距離或(huo)飛行的(de)(de)(de)(de)費用(yong)。有(you)理由(you)假(jia)設(she),這樣的(de)(de)(de)(de)一(yi)(yi)(yi)個(ge)(ge)圖是(shi)(shi)有(you)向圖,因為在不(bu)同的(de)(de)(de)(de)方向上(shang)飛機(ji)可(ke)(ke)能所(suo)(suo)用(yong)時間或(huo)所(suo)(suo)花的(de)(de)(de)(de)費用(yong)會不(bu)同(例如(ru)(ru),依(yi)賴于地方稅(shui))。可(ke)(ke)能我們(men)更愿意(yi)航空系(xi)統是(shi)(shi)強連(lian)(lian)通的(de)(de)(de)(de),這樣就總能夠從任一(yi)(yi)(yi)機(ji)場飛到領(ling)帶的(de)(de)(de)(de)任意(yi)一(yi)(yi)(yi)個(ge)(ge)機(ji)場,我們(men)也可(ke)(ke)能愿意(yi)迅速確定任意(yi)兩個(ge)(ge)機(ji)場之(zhi)間的(de)(de)(de)(de)佳(jia)航線(xian)(xian)。佳(jia)可(ke)(ke)以是(shi)(shi)指(zhi)邊(bian)數少的(de)(de)(de)(de)路徑(jing),也可(ke)(ke)以是(shi)(shi)根據一(yi)(yi)(yi)種或(huo)所(suo)(suo)有(you)的(de)(de)(de)(de)全中(zhong)量度所(suo)(suo)算出的(de)(de)(de)(de)佳(jia)者。

交(jiao)通可(ke)以用一個圖來模(mo)型(xing)化。每一條(tiao)接到交(jiao)叉口表示一個頂點,而每一條(tiao)街道就是一條(tiao)邊。邊的值可(ke)能(neng)代表速(su)度(du)限(xian)度(du),伙食容量,等(deng)等(deng)。此時我們(men)可(ke)能(neng)是需(xu)要找出一條(tiao)短路(lu),或(huo)用該信(xin)息找出可(ke)能(neng)產生交(jiao)通瓶(ping)頸的位置。

一、圖的c語言實(shi)現

如下:
#define MAXN 64           ∥大頂點數∥
typedef char vtype;            ∥設頂點為字符類型∥
typedef int adjtype;           ∥設鄰接矩陣A中元素aij為整型∥
typedef struct
{
vtype V[MAXN];             ∥頂點存儲空間∥
    adjtype A[MAXN][MAXN];     ∥鄰接矩陣∥
} mgraph;               
void createmgraph(mgraph G)    ∥建立無向圖的數組表示法∥
{  
int  i, j, n;
    vtype  ch, u, v;
    adjtype  w;
    i = n = 0;
    ch=getchar( );             ∥輸入頂點∥ 
    while (ch!=‘#’)          ∥#為結束符∥
{  
n++;                   ∥頂點計數∥
        if (n>MAXN-1) 
ERROR(n);          ∥溢出處理∥
        G.V[i++]=ch; ch=getchar( ); ∥存入頂點, 并讀下一頂點∥
}
    for (i=0; i<n; i++)    ∥初始化鄰接矩陣∥
        for (j=0; j<n; j++)
            G.A[i][j]=max;       ∥設max為機器表示的∞∥
  scanf(“%c %c %d”, &u, &v, &w);   ∥讀入一條邊<u, v>及權值 ∥
    while (u != ‘#’)           ∥u=‘#’時結束∥
    {   
i = locatevex(G,u);      ∥求u的序號∥
        j = locatevex(G,v);      ∥求v的序號∥
        G.A[i][j] = G.A[j][i] = w;      ∥鄰接矩陣賦值(對稱)∥
        scanf (“%c %c %d”,&u,&v,&w);  ∥讀下一條邊∥
}                        
}  

設圖中頂點(dian)數為(wei)(wei)n,邊(bian)的(de)條數為(wei)(wei)e。第一個while循(xun)(xun)環執(zhi)行(xing)次數為(wei)(wei)n;后兩個for循(xun)(xun)環的(de)執(zhi)行(xing)次數約為(wei)(wei)n2;后一個while循(xun)(xun)環執(zhi)行(xing)次數為(wei)(wei)e;故算(suan)法(fa)的(de)時(shi)間復(fu)雜度為(wei)(wei)T(n,e)=O(n2+e)。若n2>>e,則(ze)時(shi)間復(fu)雜度為(wei)(wei)O(n2)。

說明:mgraph G;則G為存儲圖的(de)一個結構體變量,G.V[MAXN]為頂點的(de)存儲空間(jian),而(er)G.A[MAXN][MAXN]為鄰接矩陣。

數組表示(shi)法(fa)存儲結構的(de)建立(li)(li)算(suan)法(fa)比較簡(jian)單:讀入頂(ding)點(dian)和關(guan)系集(弧、邊(bian)),建立(li)(li)頂(ding)點(dian)表和鄰接矩陣即可。

由于(yu)篇幅(fu)的(de)(de)(de)限制,關于(yu)圖的(de)(de)(de)存儲問(wen)題,關于(yu)廣度優先搜(sou)(sou)索、深度優先搜(sou)(sou)索、拓撲(pu)結構的(de)(de)(de)處(chu)理(li)(li),我會(hui)在后續的(de)(de)(de)篇幅(fu)中,整理(li)(li)總結。

本文(wen)參(can)照文(wen)獻:

[1]. 《數(shu)據(ju)結構體與算法分析--c語言(yan)描(miao)述》 Mark Allen Weiss 著 機械(xie)工業出(chu)版社出(chu)版。

[2].華清遠見 《數據結構(gou)》課件

上一篇:ubuntu新版本安裝全攻略教程

下一篇:嵌入式系統移植步驟

熱點文章推(tui)薦
華清(qing)學員(yuan)就業榜單(dan)
高薪學員經驗分(fen)享(xiang)
熱點新聞推薦
前(qian)臺專線:010-82525158 企(qi)業培訓(xun)洽談專線:010-82525379 院校合(he)作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部