精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
實驗五?無向圖鄰接表存儲結構的創建、遍歷及求連通分量

實驗五 無向圖鄰接表存儲結構的創建、遍歷及求連通分量

#include<iostream.h>
typedef char vextype;
const MAXVER=21;
typedef struct listnode      

 int adjvex;
 struct listnode* next;  
}listnode;//表結點                         
            
typedef struct
  
 vextype data;
 listnode  *first;
}headnode;//頭結點

typedef struct

 headnode vexs[MAXVER];
    int vexnum,arcnum;
} ALgraph;//圖

void createALgraph(ALgraph &G)
{
    int i, s, d;
    listnode *p,*q;
    cout<<"輸入圖的頂點數和邊數:";
    cin>>G.vexnum>>G.arcnum;
    for(i=1;i<=G.vexnum;i++)
   
  cout<<"\n輸入第"<<i<<"個頂點信息:"; 
  cin>>G.vexs[i].data;
  G.vexs[i].first=NULL;
    } //輸入第i個結點值并初始化第i個單鏈表為空  
 for(i=1; i<=G.arcnum; i++)
   
  cout<<"\n輸入第"<<i<<"條邊的始點和終點:";
        cin>>s>>d;//s為始點,d為終點
        p=new listnode;        p->adjvex=d;
        p->next=G.vexs[s].first;
        G.vexs[s].first=p;
  //將新建的以d為信息的表結點p插入s單鏈表的頭結點后
        q=new listnode;        
  q->adjvex=s;
        q->next=G.vexs[d].first;
        G.vexs[d].first=q;
  //將新建的以s為信息的表結點q插入d單鏈表的頭結點后
    }
}

int visited[MAXVER];//定義全局數組遍歷visited
void dfs(ALgraph G, int v)//被遍歷的圖G采用鄰接表作為存儲結構,v為出發頂點編號

 listnode *p;
 cout<<G.vexs[v].data;
 visited[v]=1;
 p=G.vexs[v].first;
 while(p!=NULL)
 {
  if(visited[p->adjvex]==0)  dfs(G,p->adjvex);
  //若p所指表結點對應的鄰接頂點未訪問則遞歸地從該頂點出發調用dfs
  p=p->next;
    }
}

void dfsTraverse(ALgraph G)

 int v;
 //遍歷圖之前初始化各未訪問的頂點
 for(v=1; v<=G.vexnum; v++)
  visited[v]=0;
 //從各個未被訪問過的頂點開始進行深度遍歷
 for(v=1;v<=G.vexnum;v++)
  if(visited[v]==0)   dfs(G,v);
}

void dsfComp(ALgraph G)
int v;
   //遍歷G以前,初始化visited數組為0
   for(v=1;v<=G.vexnum;v++)
         visited[v]=0;
   for(v=1;v<=G.vexnum;v++)
      if(visited[v]==0)
      {
    cout<<endl<<"\n一個深度遍歷連通分量為:";
          dfs(G,v);
   }
}

void BFS(ALgraph G, int v)
//從頂點編號v出發,廣度遍歷鄰接表存儲的圖G
 
 int queue[MAXVER], front ,rear;
    listnode* p;
    front=rear=0;
    cout<<G.vexs[v].data;
    visited[v]=1;
    queue[++rear]=v;
    while(front!=rear)
 
  v=queue[++front];
  p=G.vexs[v].first;
  while(p!=NULL)
   
   if(visited[p->adjvex]==0)
   
    v=p->adjvex;
    cout<<G.vexs[v].data;
    visited[v]=1;
    queue[++rear]=v;
   }
   p=p->next;
  }
 }
}

void BFSTraverse(ALgraph G)
{
 int v;
 //遍歷G以前,初始化visited數組為0
 for(v=1;v<=G.vexnum;v++)
  visited[v]=0;
 for(v=1;v<=G.vexnum;v++)
  if(visited[v]==0)
   BFS(G,v);
}

void BFSComp(ALgraph G)

 int v;
 //遍歷G以前,初始化visited數組為0
 for(v=1;v<=G.vexnum;v++)
  visited[v]=0;
 for(v=1;v<=G.vexnum;v++)
  if(visited[v]==0)
  {
   cout<<endl<<"\n一個廣度遍歷連通分量為:";
   BFS(G,v);
  }
}


void main()
{
 ALgraph g;
 createALgraph(g);
 cout<<endl<<"深度遍歷結果為:";
 dfsTraverse(g);
 dsfComp(g);
 cout<<endl<<"廣度遍歷結果為:";
 BFSTraverse(g);
 BFSComp(g);
 cout<<endl;
}

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
9、深度優先算法,圖的遍歷
基于鄰結表的圖的DFS、BFS遍歷
深度優先遍歷和廣度優先遍歷
c語言數據結構--圖的鄰接矩陣和鄰接表操作的基本操作
算法之圖搜索算法(一) | 董的博客
最小支撐樹的prim算法(反圈法)c++實現
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 微山县| 郓城县| 阿坝县| 德令哈市| 宁波市| 杭锦后旗| 江孜县| 余姚市| 灵石县| 永登县| 平果县| 鄂伦春自治旗| 临海市| 贺兰县| 孟连| 台东市| 绵阳市| 平乡县| 阜新市| 新巴尔虎右旗| 广安市| 吉林省| 永平县| 乌拉特后旗| 鄂托克旗| 揭东县| 疏附县| 邯郸市| 永安市| 理塘县| 四川省| 潮州市| 湘潭县| 临夏市| 扎鲁特旗| 宾川县| 无为县| 东山县| 海林市| 南安市| 临夏县|