• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    數(shù)據(jù)結(jié)構(gòu)中鄰接圖的深度遍歷非遞歸算法(C++)

    2019-10-21 19:54:19王偉業(yè)路宇李曉寒
    青年生活 2019年13期

    王偉業(yè) 路宇 李曉寒

    摘要:在數(shù)據(jù)結(jié)構(gòu)課中,鄰接圖的深度遍歷往往采用遞歸算法,但遞歸算法有時存在后臺程序過多,導(dǎo)致運行慢的缺點。為了解決這一問題,下面給出鄰接圖的深度遍歷的非遞歸算法(C++)。

    關(guān)鍵詞:鄰接圖 深度遍歷 非遞歸

    一、結(jié)構(gòu)體定義

    圖采用鄰接表的形式存儲,分為頂點表和邊表,具體定義如下:

    struct ArcNode ? ?//定義邊表節(jié)點

    {

    int adjvex; ? ? //臨界點域

    ArcNode *next;

    };

    template

    struct ?VertexNode ?//定義頂點表節(jié)點

    {

    DataType vertex;

    ArcNode *firstedge;

    };

    二、算法描述

    首先,引入棧stack[ ],數(shù)組visited[ ],該數(shù)組對于節(jié)點i,若i已被訪問,則visited[i]=1;若i還沒被訪問過,則visited[i]=0。頂點v開始,將v輸出并入棧,且將visited[v]設(shè)為1,然后通過兩層while循環(huán),深度遍歷整個圖。

    三、算法實現(xiàn)

    template

    void MGraph ::DFSTraverse(int v)

    {

    cout << adjlist[v].vertex;

    visited[v]=1;

    top=-1;

    s[++top]=v;

    while(top!=-1)

    {

    i=stack[top];

    p=adjlist[i].firstedge;

    while(p!=NULL)

    {

    t=p->adjvex;

    if(visited[t]==0)

    {

    visited[v]=1;

    cout<

    stack[++top]=t;

    break;

    }

    else p=p->next;

    }

    if(p==NULL) ?top--;

    }

    }

    四、算法總結(jié)

    該算法利用了雙層的while循環(huán),從而達到了遞歸算法的效果,雖代碼長度比遞歸算法長,但優(yōu)化了算法的運行速度,更適合點集很大的圖使用。

    高阳县| 浏阳市| 武义县| 平阳县| 新兴县| 柳林县| 浑源县| 左云县| 阳高县| 扎赉特旗| 栾川县| 松桃| 洪洞县| 彭州市| 牡丹江市| 邢台县| 辰溪县| 神农架林区| 彰武县| 南木林县| 谢通门县| 永和县| 永安市| 博客| 泰宁县| 定陶县| 综艺| 化德县| 兖州市| 英吉沙县| 建湖县| 镇江市| 大冶市| 徐汇区| 融水| 通城县| 许昌县| 北安市| 扶绥县| 伊川县| 义马市|