最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)圖的鄰接表存儲和廣度優(yōu)先遍歷實例分析

 更新時間:2015年04月20日 11:42:18   作者:司青  
這篇文章主要介紹了C++實現(xiàn)圖的鄰接表存儲和廣度優(yōu)先遍歷,實例分析了C++實現(xiàn)圖的存儲與遍歷技巧,非常具有實用價值,需要的朋友可以參考下

本文實例講述了C++實現(xiàn)圖的鄰接表存儲和廣度優(yōu)先遍歷方法。分享給大家供大家參考。具體如下:

示例:建立如圖所示的無向圖

由上圖知,該圖有5個頂點,分別為a,b,c,d,e,有6條邊.

示例輸入(按照這個格式輸入):

5
6
abcde
0 1
0 2
0 3
2 3
2 4
1 4

輸入結束(此行不必輸入)

注:0 1表示該圖的第0個頂點和第1個定點有邊相連,如上圖中的a->b所示
      0 2表示該圖的第0個頂點和第2個定點有邊相連,如上圖中的a->c所示
      2 3表示該圖的第2個頂點和第3個定點有邊相連,如上圖中的c->d所示

實現(xiàn)代碼如下:

#include <stdio.h>
#include <malloc.h>
#define MAX_VEX 50
typedef struct NODE
{
 int ix; /* 頂點的索引 */
 struct NODE *next; /* 下一個表結點 */
}EdgeNode; /* 表結點 */
typedef struct
{
 char vex;
 EdgeNode *first; /* 第一個表結點 */
}Vertex; /* 表頭結點 */
typedef struct
{
 Vertex vex[MAX_VEX];
 int n,e;
}GRAPH;
void Create(GRAPH *G);
void BFS(GRAPH *G,int k); /* 廣度優(yōu)先遍歷 */
int main(int argc, char *argv[])
{
 GRAPH G;
 Create(&G);
 BFS(&G,0);
 
 return 0;
}
void BFS(GRAPH *G,int k)
{
 EdgeNode *p;
 int queue[MAX_VEX]; /* 循環(huán)隊列 */
 int front = -1,rear = -1,amount = 0;
 int visited[MAX_VEX];
 int i,j;
 for(i = 0 ; i < MAX_VEX ; ++i)
  visited[i] = 0;
  
 printf("訪問頂點:%c\n",G->vex[k].vex);
 visited[k] = 1;
 rear = (rear + 1) % MAX_VEX; /* 入隊 */
 front = 0;
 queue[rear] = k;
 ++amount;
 
 while(amount > 0)
 {
  i = queue[front]; /* 出隊 */
  front = (front + 1) % MAX_VEX;
  --amount;
  p = G->vex[i].first;
  
  while(p)
  {
   if(visited[p->ix] == 0)
   {
    printf("訪問頂點:%c\n",G->vex[p->ix].vex);
    visited[p->ix] = 1;
    rear = (rear + 1) % MAX_VEX; /* 入隊 */
    queue[rear] = p->ix;
    ++amount;
   }
   p = p->next;
  }
  
 }
}
void Create(GRAPH *G)
{
 printf("輸入頂點數(shù):\n");
 scanf("%d",&G->n);
 printf("輸入邊數(shù):\n");
 scanf("%d",&G->e);
 getchar();
 EdgeNode *p;
 
 int i,j,k;
 for(i = 0 ; i < G->n ; ++i) /* 建立頂點表 */
 {
  scanf("%c",&G->vex[i].vex);
  G->vex[i].first = NULL;
 }
 
 for(k = 0 ; k < G->e ; ++k) /* 建立邊表 */
 {/* 類似于頭插法創(chuàng)建鏈表 */
  scanf("%d%d",&i,&j);
  p = (EdgeNode*)malloc(sizeof(EdgeNode));
  p->next = G->vex[i].first;
  p->ix = j;
  G->vex[i].first = p;
  
  p = (EdgeNode*)malloc(sizeof(EdgeNode));
  p->next = G->vex[j].first;
  p->ix = i;
  G->vex[j].first = p;
 }
}

希望本文所述對大家的C++程序設計有所幫助。

相關文章

  • C語言實現(xiàn)飛機游戲(1)

    C語言實現(xiàn)飛機游戲(1)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)飛機游戲的第一部分,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++?構造函數(shù)和析構函數(shù)(Constructors?&?Destructors)詳解

    C++?構造函數(shù)和析構函數(shù)(Constructors?&?Destructors)詳解

    由于global?object的誕生比程序進入更早點,所以global?object的constructor執(zhí)行的時間更早于程序的進入點,所謂的default?constructor就是沒有指定任何的參數(shù)的constructor,這篇文章主要介紹了C++?構造函數(shù)和析構函數(shù)的相關知識,需要的朋友可以參考下
    2024-05-05
  • C語言詳解如何實現(xiàn)帶頭雙向循環(huán)鏈表

    C語言詳解如何實現(xiàn)帶頭雙向循環(huán)鏈表

    帶頭雙向循環(huán)鏈表:結構最復雜,一般用在單獨存儲數(shù)據(jù)。實際中使用的鏈表數(shù)據(jù)結構,都是帶頭雙向循環(huán)鏈表。另外這個結構雖然結構復雜,但是使用代碼實現(xiàn)以后會發(fā)現(xiàn)結構會帶來很多優(yōu)勢,實現(xiàn)反而簡單
    2022-04-04
  • 詳解C語言如何實現(xiàn)雙向帶頭循環(huán)鏈表

    詳解C語言如何實現(xiàn)雙向帶頭循環(huán)鏈表

    雙向帶頭循環(huán)鏈表應該是鏈表中非常方便的一種,可以很容易的在任意位置上進行插入和刪除,可以很容易的對鏈表進行管理。本文將利用C語言實現(xiàn)雙向帶頭循環(huán)鏈表,需要的可以參考一下
    2022-08-08
  • 深度解析三個常見的C語言內存函數(shù)

    深度解析三個常見的C語言內存函數(shù)

    這篇文章主要深度解析了三個常見的C語言內存函數(shù)memcpy,memmove,memcmp,所以本文將對memcpy,memmove,memcmp 三個函數(shù)進行詳解和模擬實現(xiàn),需要的朋友可以參考下
    2023-07-07
  • C/C++動態(tài)分配與釋放內存的區(qū)別詳細解析

    C/C++動態(tài)分配與釋放內存的區(qū)別詳細解析

    以下是對C與C++中動態(tài)分配與釋放內存的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • 關于c++編譯protobuf時提示LNK2001 無法解析的外部符號的問題

    關于c++編譯protobuf時提示LNK2001 無法解析的外部符號的問題

    這篇文章主要介紹了關于c++編譯protobuf時提示LNK2001 無法解析的外部符號的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • C語言實現(xiàn)打印楊輝三角的方法詳細(三種方法)

    C語言實現(xiàn)打印楊輝三角的方法詳細(三種方法)

    楊輝三角是中國古代數(shù)學的杰出研究成果之一,它把二項式系數(shù)圖形化,把組合數(shù)內在的一些代數(shù)性質直觀地從圖形中體現(xiàn)出來,是一種離散型的數(shù)與形的結合。本文將介紹三種可以實現(xiàn)打印楊輝三角的辦法,感興趣的可以試一試
    2022-01-01
  • C語言實現(xiàn)將彩色bmp圖像轉化為灰圖、灰度圖像反色

    C語言實現(xiàn)將彩色bmp圖像轉化為灰圖、灰度圖像反色

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)將彩色bmp圖像轉化為灰圖、灰度圖像反色,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言動態(tài)規(guī)劃多種背包問題分析講解

    C語言動態(tài)規(guī)劃多種背包問題分析講解

    背包問題(Knapsack problem)是一種組合優(yōu)化的NP完全問題。問題可以描述為:給定一組物品,每種物品都有自己的重量和價格,在限定的總重量內,我們如何選擇,才能使得物品的總價格最高
    2022-04-04

最新評論

德钦县| 陈巴尔虎旗| 镇雄县| 全椒县| 阳城县| 岐山县| 濮阳市| 革吉县| 临颍县| 额尔古纳市| 绥棱县| 墨玉县| 顺平县| 余干县| 霸州市| 金乡县| 肇源县| 玉山县| 南充市| 黔西县| 中超| 临安市| 茂名市| 丹东市| 枣阳市| 双桥区| 屯留县| 理塘县| 含山县| 大田县| 莫力| 手游| 柯坪县| 比如县| 福海县| 莫力| 濮阳市| 阿巴嘎旗| 开鲁县| 台江县| 拜城县|