• 
    

    
    

      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)化了算法的運行速度,更適合點集很大的圖使用。

      革吉县| 滨海县| 新疆| 龙州县| 津市市| 岫岩| 滨州市| 惠水县| 余干县| 秦安县| 绥棱县| 土默特右旗| 福清市| 安龙县| 司法| 靖州| 犍为县| 临城县| 镇江市| 社会| 郑州市| 新乡县| 菏泽市| 金溪县| 东阿县| 曲周县| 易门县| 康保县| 庆阳市| 九寨沟县| 于田县| 茶陵县| 启东市| 上栗县| 阳原县| 崇仁县| 蓬溪县| 老河口市| 根河市| 吴堡县| 内乡县|