99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

C語言數據結構之圖的遍歷實例詳解

C語言數據結構之圖的遍歷實例詳解

成都創新互聯公司服務項目包括洛浦網站建設、洛浦網站制作、洛浦網頁制作以及洛浦網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,洛浦網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到洛浦省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!

輸入一組頂點,建立無向圖的鄰接矩陣。輸入一組頂點,建立有向圖的鄰接表。分別對無向圖和有向圖進行DFS(深度優先遍歷)和BFS(廣度優先遍歷)。寫出深度優先遍歷的遞歸和非遞歸算法。根據建立的有向圖,判斷該圖是否是有向無環圖,若是,則輸出其一種拓撲有序序列。

實現代碼:

#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) 
{//初始化一個隊列 
  Q.base=(int*)malloc(MAX*sizeof(int)); 
  Q.front=Q.rear=0; 
} 
 
int QueueEmpty(CqQueue Q) 
{//判斷隊列是否為空 
  if(Q.rear==Q.front) 
    return 1; 
  return 0; 
} 
 
void EnQueue(CqQueue &Q,int e) 
{//入隊操作 
  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) 
{//出隊操作 
  if(Q.rear==Q.front) 
    return; 
  e=Q.base[Q.front]; 
  Q.front=(Q.front+1)%MAX; 
} 
 
int LocateVex(ALGraph G,char v) 
{//查找頂點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) 
{//建立無向圖的鄰接表 
  int v,i,j,k; 
  char v1,v2; 
  ArcNode *p,*s; 
  printf("輸入無向圖的頂點數和邊數:\n"); 
  scanf("%d%d",&G.vexnum,&G.arcnum); 
  getchar(); 
  printf("輸入圖的頂點信息:\n"); 
  for(v=0;v<G.vexnum;v++){ 
    scanf("%c",&G.vertices[v].data);getchar(); 
    G.vertices[v].firstarc=NULL; 
  } 
   
  printf("輸入無向圖的邊:\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) 
{//從頂點v開始對圖G進行深度優先搜索 
  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) 
{//對用鄰接表存儲的無向圖G進行深度優先遍歷 
  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) 
{//對用鄰接表存儲的無向圖G進行深度優先遍歷 
  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("建立無向圖的鄰接表:\n"); 
  CreateAdjList(G); 
  printf("無向圖的深度優先遍歷序列如下:\n"); 
  DFSTraverse(G); 
  printf("\n\n無向圖的廣度優先遍歷序列如下:\n"); 
  BFSTraverse(G); 
  printf("\n"); 
  return 0; 
} 

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

分享題目:C語言數據結構之圖的遍歷實例詳解
標題網址:http://www.yijiale78.com/article6/ihdjig.html

成都網站建設公司_創新互聯,為您提供手機網站建設面包屑導航網站維護網站營銷企業建站電子商務

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計