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

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

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

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

示例:建立如圖所示的無(wú)向圖

由上圖知,該圖有5個(gè)頂點(diǎn),分別為a,b,c,d,e,有6條邊.

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

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

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

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

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

#include <stdio.h>
#include <malloc.h>
#define MAX_VEX 50
typedef struct NODE
{
 int ix; /* 頂點(diǎn)的索引 */
 struct NODE *next; /* 下一個(gè)表結(jié)點(diǎn) */
}EdgeNode; /* 表結(jié)點(diǎn) */
typedef struct
{
 char vex;
 EdgeNode *first; /* 第一個(gè)表結(jié)點(diǎn) */
}Vertex; /* 表頭結(jié)點(diǎn) */
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)隊(duì)列 */
 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("訪問(wèn)頂點(diǎn):%c\n",G->vex[k].vex);
 visited[k] = 1;
 rear = (rear + 1) % MAX_VEX; /* 入隊(duì) */
 front = 0;
 queue[rear] = k;
 ++amount;
 
 while(amount > 0)
 {
  i = queue[front]; /* 出隊(duì) */
  front = (front + 1) % MAX_VEX;
  --amount;
  p = G->vex[i].first;
  
  while(p)
  {
   if(visited[p->ix] == 0)
   {
    printf("訪問(wèn)頂點(diǎn):%c\n",G->vex[p->ix].vex);
    visited[p->ix] = 1;
    rear = (rear + 1) % MAX_VEX; /* 入隊(duì) */
    queue[rear] = p->ix;
    ++amount;
   }
   p = p->next;
  }
  
 }
}
void Create(GRAPH *G)
{
 printf("輸入頂點(diǎn)數(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) /* 建立頂點(diǎn)表 */
 {
  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;
 }
}

希望本文所述對(duì)大家的C++程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)飛機(jī)游戲(1)

    C語(yǔ)言實(shí)現(xiàn)飛機(jī)游戲(1)

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

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

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

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

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

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

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

    深度解析三個(gè)常見(jiàn)的C語(yǔ)言內(nèi)存函數(shù)

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

    C/C++動(dòng)態(tài)分配與釋放內(nèi)存的區(qū)別詳細(xì)解析

    以下是對(duì)C與C++中動(dòng)態(tài)分配與釋放內(nèi)存的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • 關(guān)于c++編譯protobuf時(shí)提示LNK2001 無(wú)法解析的外部符號(hào)的問(wèn)題

    關(guān)于c++編譯protobuf時(shí)提示LNK2001 無(wú)法解析的外部符號(hào)的問(wèn)題

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

    C語(yǔ)言實(shí)現(xiàn)打印楊輝三角的方法詳細(xì)(三種方法)

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

    C語(yǔ)言實(shí)現(xiàn)將彩色bmp圖像轉(zhuǎn)化為灰圖、灰度圖像反色

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

    C語(yǔ)言動(dòng)態(tài)規(guī)劃多種背包問(wèn)題分析講解

    背包問(wèn)題(Knapsack problem)是一種組合優(yōu)化的NP完全問(wèn)題。問(wèn)題可以描述為:給定一組物品,每種物品都有自己的重量和價(jià)格,在限定的總重量?jī)?nèi),我們?nèi)绾芜x擇,才能使得物品的總價(jià)格最高
    2022-04-04

最新評(píng)論

丹江口市| 友谊县| 遵义县| 棋牌| 永胜县| 九寨沟县| 栾川县| 都昌县| 兴和县| 攀枝花市| 多伦县| 栾川县| 安顺市| 黄骅市| 萝北县| 三明市| 江门市| 东乌| 柞水县| 察雅县| 阿巴嘎旗| 梁河县| 上虞市| 湛江市| 全州县| 鲁甸县| 元朗区| 乌拉特中旗| 鹤峰县| 城步| 和顺县| 安溪县| 阳泉市| 松溪县| 新丰县| 儋州市| 新巴尔虎右旗| 大英县| 靖西县| 丹巴县| 防城港市|