欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之圖的遍歷實(shí)例詳解

 更新時(shí)間:2017年07月05日 10:43:47   投稿:lqh  
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之圖的遍歷實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之圖的遍歷實(shí)例詳解

輸入一組頂點(diǎn),建立無(wú)向圖的鄰接矩陣。輸入一組頂點(diǎn),建立有向圖的鄰接表。分別對(duì)無(wú)向圖和有向圖進(jìn)行DFS(深度優(yōu)先遍歷)和BFS(廣度優(yōu)先遍歷)。寫出深度優(yōu)先遍歷的遞歸和非遞歸算法。根據(jù)建立的有向圖,判斷該圖是否是有向無(wú)環(huán)圖,若是,則輸出其一種拓?fù)溆行蛐蛄小?br />

實(shí)現(xiàn)代碼:

#include <stdio.h> 
#include <stdlib.h> 
#define MAX 20 
 
typedef struct ArcNode{ 
  int adjvex; 
  struct ArcNode *nextarc; 
}ArcNode; 
 
typedef struct{ 
  char data; 
  ArcNode *firstarc; 
}AdjList[MAX]; 
 
typedef struct{ 
  AdjList vertices; 
  int vexnum; 
  int arcnum; 
}ALGraph; 
 
typedef struct{ 
  int *base; 
  int front,rear; 
}CqQueue; 
 
void InitQueue(CqQueue &Q) 
{//初始化一個(gè)隊(duì)列 
  Q.base=(int*)malloc(MAX*sizeof(int)); 
  Q.front=Q.rear=0; 
} 
 
int QueueEmpty(CqQueue Q) 
{//判斷隊(duì)列是否為空 
  if(Q.rear==Q.front) 
    return 1; 
  return 0; 
} 
 
void EnQueue(CqQueue &Q,int e) 
{//入隊(duì)操作 
  if((Q.rear+1)%MAX==Q.front) 
    return; 
  Q.base[Q.rear]=e; 
  Q.rear=(Q.rear+1)%MAX; 
} 
 
void DeQueue(CqQueue &Q,int &e) 
{//出隊(duì)操作 
  if(Q.rear==Q.front) 
    return; 
  e=Q.base[Q.front]; 
  Q.front=(Q.front+1)%MAX; 
} 
 
int LocateVex(ALGraph G,char v) 
{//查找頂點(diǎn)v在圖G中的位置 
  for(int i=0;i<G.vexnum;i++) 
    if(G.vertices[i].data==v) 
      return i; 
  return -1; 
 
 
  for(int i=0;i<G.vexnum;i++) 
    if(G.vexs[i]==v) 
      return i; 
  return -1; 
} 
 
void CreateAdjList(ALGraph &G) 
{//建立無(wú)向圖的鄰接表 
  int v,i,j,k; 
  char v1,v2; 
  ArcNode *p,*s; 
  printf("輸入無(wú)向圖的頂點(diǎn)數(shù)和邊數(shù):\n"); 
  scanf("%d%d",&G.vexnum,&G.arcnum); 
  getchar(); 
  printf("輸入圖的頂點(diǎn)信息:\n"); 
  for(v=0;v<G.vexnum;v++){ 
    scanf("%c",&G.vertices[v].data);getchar(); 
    G.vertices[v].firstarc=NULL; 
  } 
   
  printf("輸入無(wú)向圖的邊:\n"); 
  for(k=0;k<G.vexnum;k++){ 
    scanf("%c%c",&v1,&v2); 
    getchar(); 
    i=LocateVex(G,v1); 
    j=LocateVex(G,v2); 
    s=(ArcNode*)malloc(sizeof(ArcNode)); 
    s->adjvex=j; 
    s->nextarc=NULL; 
    if(!G.vertices[i].firstarc) 
      G.vertices[i].firstarc=s; 
    else{ 
      p=G.vertices[i].firstarc; 
      while(p->nextarc) 
        p=p->nextarc; 
      p->nextarc=s; 
    } 
    s=(ArcNode*)malloc(sizeof(ArcNode)); 
    s->adjvex=i; 
    s->nextarc=NULL; 
    if(!G.vertices[j].firstarc) 
      G.vertices[j].firstarc=s; 
    else{ 
      p=G.vertices[j].firstarc; 
      while(p->nextarc) 
        p=p->nextarc; 
      p->nextarc=s; 
    } 
  } 
} 
 
int visited[MAX]; 
 
void DFS(ALGraph G,int v) 
{//從頂點(diǎn)v開(kāi)始對(duì)圖G進(jìn)行深度優(yōu)先搜索 
  ArcNode *p; 
  printf("%3c",G.vertices[v].data); 
  visited[v]=1; 
  for(p=G.vertices[v].firstarc;p;p=p->nextarc) 
    if(!visited[p->adjvex]) 
      DFS(G,p->adjvex); 
} 
 
void DFSTraverse(ALGraph G) 
{//對(duì)用鄰接表存儲(chǔ)的無(wú)向圖G進(jìn)行深度優(yōu)先遍歷 
  int v; 
  for(v=0;v<G.vexnum;v++) 
    visited[v]=0; 
  for(v=0;v<G.vexnum;v++) 
    if(!visited[v]) 
      DFS(G,v); 
} 
 
void BFSTraverse(ALGraph G) 
{//對(duì)用鄰接表存儲(chǔ)的無(wú)向圖G進(jìn)行深度優(yōu)先遍歷 
  int u,v; 
  CqQueue Q; 
  ArcNode *p; 
  for(v=0;v<G.vexnum;v++) 
    visited[v]=0; 
  InitQueue(Q); 
  for(v=0;v<G.vexnum;v++) 
    if(!visited[v]){ 
      printf("%3c",G.vertices[v].data); 
      visited[v]=1; 
      EnQueue(Q,v); 
      while(!QueueEmpty(Q)){ 
        DeQueue(Q,u); 
        for(p=G.vertices[u].firstarc;p;p=p->nextarc) 
          if(!visited[p->adjvex]){ 
            printf("%3c",G.vertices[p->adjvex].data); 
            visited[p->adjvex]=1; 
            EnQueue(Q,p->adjvex); 
          } 
      } 
    } 
} 
 
int main(){ 
  ALGraph G; 
  printf("建立無(wú)向圖的鄰接表:\n"); 
  CreateAdjList(G); 
  printf("無(wú)向圖的深度優(yōu)先遍歷序列如下:\n"); 
  DFSTraverse(G); 
  printf("\n\n無(wú)向圖的廣度優(yōu)先遍歷序列如下:\n"); 
  BFSTraverse(G); 
  printf("\n"); 
  return 0; 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • matlab鳥(niǎo)群算法求解車間調(diào)度問(wèn)題詳解及實(shí)現(xiàn)源碼

    matlab鳥(niǎo)群算法求解車間調(diào)度問(wèn)題詳解及實(shí)現(xiàn)源碼

    這篇文章主要為大家介紹了matlab鳥(niǎo)群算法求解車間調(diào)度的問(wèn)題分析及實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • C語(yǔ)言可變參數(shù)函數(shù)詳解

    C語(yǔ)言可變參數(shù)函數(shù)詳解

    在某些情況下我們希望函數(shù)的參數(shù)個(gè)數(shù)可以根據(jù)需要確定,因此c語(yǔ)言引入可變參數(shù)函數(shù)。典型的可變參數(shù)函數(shù)的例子有printf()、scanf()等,下面我就開(kāi)始講解
    2021-08-08
  • C++淺析引用的定義與使用

    C++淺析引用的定義與使用

    引用是C++一個(gè)很重要的特性,顧名思義是某一個(gè)變量或?qū)ο蟮膭e名,對(duì)引用的操作與對(duì)其所綁定的變量或?qū)ο蟮牟僮魍耆葍r(jià),這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識(shí)點(diǎn),需要的朋友可以參考下
    2022-07-07
  • C語(yǔ)言學(xué)習(xí)筆記之字符串間的那些事

    C語(yǔ)言學(xué)習(xí)筆記之字符串間的那些事

    字符串是C語(yǔ)言中最重要的數(shù)據(jù)類型之一,最近借助《C Primer Plus》一書(shū)來(lái)學(xué)習(xí)C中的常用字符串操作,在此作為筆記記錄,下面這篇文章主要給大家介紹了C語(yǔ)言學(xué)習(xí)筆記之字符串間的那些事,需要的朋友可以參考下
    2022-04-04
  • Vscode配置C/C++環(huán)境使用minGW(保姆級(jí)配置過(guò)程)

    Vscode配置C/C++環(huán)境使用minGW(保姆級(jí)配置過(guò)程)

    本文主要介紹了Vscode配置C/C++環(huán)境使用minGW(保姆級(jí)配置過(guò)程),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C利用語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)之隊(duì)列

    C利用語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)之隊(duì)列

    隊(duì)列 (Queue):簡(jiǎn)稱隊(duì),是另一種限定性的線性表,它只允許在表的一端插入元素,而在另一端刪除元素。q=(a1, a2, a3, … an),其中a1為隊(duì)頭,an為隊(duì)尾,下面文章小編將為大家詳細(xì)介紹,需要的下伙伴可以參考一下
    2021-10-10
  • C語(yǔ)言編程中對(duì)目錄進(jìn)行基本的打開(kāi)關(guān)閉和讀取操作詳解

    C語(yǔ)言編程中對(duì)目錄進(jìn)行基本的打開(kāi)關(guān)閉和讀取操作詳解

    這篇文章主要介紹了C語(yǔ)言編程中對(duì)目錄進(jìn)行基本的打開(kāi)關(guān)閉和讀取操作,是C語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • c語(yǔ)言實(shí)現(xiàn)奇偶排序算法

    c語(yǔ)言實(shí)現(xiàn)奇偶排序算法

    這篇文章主要介紹了c語(yǔ)言實(shí)現(xiàn)奇偶排序算法,有需要的朋友可以參考一下
    2013-12-12
  • C語(yǔ)言實(shí)現(xiàn)經(jīng)典24點(diǎn)紙牌益智游戲

    C語(yǔ)言實(shí)現(xiàn)經(jīng)典24點(diǎn)紙牌益智游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)經(jīng)典24點(diǎn)紙牌益智游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語(yǔ)言:自定義類型詳解

    C語(yǔ)言:自定義類型詳解

    這篇文章主要介紹了C語(yǔ)言自定義函數(shù)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09

最新評(píng)論