日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图的遍历(深度优先搜索法和广度优先搜索法)

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图的遍历(深度优先搜索法和广度优先搜索法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

?

?

?

深度搜索? // ----------------------------------------------------------------
// 圖的深度優先搜索法
// ----------------------------------------------------------------
#include " iostream "
#include
" stdlib.h "
using namespace std;
struct node // 圖頂點結構聲明
{
int vertex; // 頂點數據
struct node * nextnode; // 指下一頂點的指針
};

typedef
struct node * graph; // 圖的結構新類型
struct node head[ 9 ]; // 圖的頂點結構數組
int visited[ 9 ]; // 頂點記錄數組

// -----------------------------------------------------------------
// 創建圖
// -----------------------------------------------------------------


void creategraph( int * node, int num)
{
graph newnode;
// 新頂點指針
graph ptr;
int from; // 邊的起點
int to; // 邊的終點
int i;


for (i = 0 ;i < num;i ++ ) // 讀取邊的循環
{
from
= node[i * 2 ]; // 邊的起點
to = node[i * 2 + 1 ]; // 邊的終點


// -----------------創建新頂點內存------------------------------

newnode
= (graph) malloc( sizeof ( struct node));
newnode
-> vertex = to; // 創建頂點內容
newnode -> nextnode = NULL; // 設置指針初值
ptr =& (head[from]); // 頂點位置
while (ptr -> nextnode != NULL) // 遍歷至鏈表尾
ptr = ptr -> nextnode; // 下一個頂點
ptr -> nextnode = newnode; // 插入結尾

}

}

// ------------------------------------------------------------------------
// 圖的深度優先搜索
// ------------------------------------------------------------------------

void dfs( int current)
{

graph ptr;

visited[current]
= 1 ; // 記錄已遍歷過
printf( " 頂點[%d] " ,current); // 輸出遍歷頂點值
ptr = head[current].nextnode; // 頂點位置
while (ptr != NULL) // 遍歷至鏈表尾
{
if (visited[ptr -> vertex] == 0 ) // 如果沒遍歷過

dfs(ptr
-> vertex); // 遞歸遍歷調用
ptr = ptr -> nextnode; // 下一個頂點


}

}
// ----------------將遍歷內容輸出------------------------
int main()
{
graph ptr;
int node[ 20 ][ 2 ] = { // 邊數組
{ 1 , 2 },{ 2 , 1 },
{
1 , 3 },{ 3 , 1 },
{
2 , 4 },{ 4 , 2 },
{
2 , 5 },{ 5 , 2 },
{
3 , 6 },{ 6 , 3 },
{
3 , 7 },{ 7 , 3 },
{
4 , 8 },{ 8 , 4 },
{
5 , 8 },{ 8 , 5 },
{
6 , 8 },{ 8 , 6 },
{
7 , 8 },{ 8 , 7 } };

int i;
for (i = 1 ;i <= 8 ;i ++ )
{
head[i].vertex
= i; // 設置頂點值
head[i].nextnode = NULL; // 清除圖指針
visited[i] = 0 ; // 設置遍歷初值
}

creategraph(
* node, 20 ); // 創建圖
printf( " 圖的鄰接表內容:\n " );
for (i = 1 ;i <= 8 ;i ++ )
{
printf(
" 頂點%d=> " ,head[i].vertex); // 頂點值
ptr = head[i].nextnode; // 頂點位置
while (ptr != NULL) // 遍歷至鏈表尾
{
printf(
" %d " ,ptr -> vertex); // 輸出頂點內容
ptr = ptr -> nextnode; // 下一個頂點
}
printf(
" \n " );

}
printf(
" 圖的深度優先遍歷內容: \n " );
dfs(
1 );
printf(
" \n " );
}

?

廣度搜索? // ----------------------圖的廣度優先搜索------------------------
#include " iostream "
#include
" stdlib.h "
#define MAXQUEUE 10 // 隊列的最大容量
using namespace std;

struct node // 圖頂點結構聲明
{
int vertex; // 頂點數據
struct node * nextnode; // 指向下一頂點的指針

};
typedef
struct node * graph; // 圖的結構新類型
struct node head[ 9 ]; // 圖的頂點結構數組
int visited[ 9 ]; // 遍歷記錄數組


int queue[MAXQUEUE]; // 隊列數組聲明

int front =- 1 ; // 隊列的對頭
int rear =- 1 ; // 隊列的隊尾



// ---------------------創建圖-----------------------


void creategraph( int * node, int num)
{
graph newnode;
// 新頂點指針
graph ptr;
int from; // 邊的起點
int to; // 邊的終點

int i;

for (i = 0 ;i < num;i ++ ) // 讀取邊的循環
{
from
= node[i * 2 ]; // 邊的起點
to = node[i * 2 + 1 ]; // 邊的終點


// -----------創建新頂點內存---------------------

newnode
= ( graph ) malloc( sizeof ( struct node));
newnode
-> vertex = to; // 創建頂點內容
newnode -> nextnode = NULL; // 設置指針初值
ptr =& (head[from]); // 頂點位置
while (ptr -> nextnode != NULL) // 遍歷至鏈表尾

ptr
= ptr -> nextnode; // 下一個頂點
ptr -> nextnode = newnode; // 插入結尾


}

}

// -----------------------隊列的數據存入-------------------------
int enqueue( int value)
{
if (rear >= MAXQUEUE) // 檢查隊列是否全滿
return - 1 ; // 無法存入
rear ++ ; // 隊尾指針往前移
queue[rear] = value; // 存入隊列

}


// -----------------------隊列數據的取出-----------------------

int dequeue()
{
if (front == rear) // 檢查隊列是否為空
return - 1 ; // 無法取出
front ++ ; // 對頭指針往前移
return queue[front]; // 隊列取出
}

// -------------------------圖的廣度優先搜索法--------------------------------
void bfs( int current)
{
graph ptr;

// 處理第一個頂點
enqueue(current); // 將頂點存入隊列
visited[current] = 1 ; // 記錄已遍歷過

printf(
" 頂點[%d] " ,current); // 輸出遍歷頂點值

while (front != rear ) // 隊列是否為空
{
current
= dequeue(); // 將頂點從隊列中取出
ptr = head[current].nextnode; // 頂點位置

while (ptr != NULL) // 遍歷至鏈表尾
{
if (visited[ptr -> vertex] == 0 ) // 如果沒有遍歷過
{
enqueue(ptr
-> vertex); // 遞歸遍歷調用
visited[ptr -> vertex] = 1 ; // 記錄已遍歷過

printf(
" 頂點[%d] " ,ptr -> vertex);
}
ptr
= ptr -> nextnode; // 下一個頂點
}

}

}
// -----------------將遍歷內容輸出-----------------------

int main()
{

graph ptr;
int node[ 20 ][ 2 ] = { // 邊數組
{ 1 , 2 },{ 2 , 1 },
{
1 , 3 },{ 3 , 1 },
{
2 , 4 },{ 4 , 2 },
{
2 , 5 },{ 5 , 2 },
{
3 , 6 },{ 6 , 3 },
{
3 , 7 },{ 7 , 3 },
{
4 , 8 },{ 8 , 4 },
{
5 , 8 },{ 8 , 5 },
{
6 , 8 },{ 8 , 6 },
{
7 , 8 },{ 8 , 7 } };

int i;
for (i = 1 ;i <= 8 ;i ++ )
{
head[i].vertex
= i; // 設置頂點值
head[i].nextnode = NULL; // 清除圖指針
visited[i] = 0 ; // 設置遍歷初值
}
creategraph(
* node, 20 ); // 創建圖
printf( " 圖的鄰接表內容:\n " );
for (i = 1 ;i <= 8 ;i ++ )
{
printf(
" 頂點%d => " ,head[i].vertex); // 頂點值
ptr = head[i].nextnode; // 頂點位置
while (ptr != NULL) // 遍歷至鏈表尾
{
printf(
" %d " ,ptr -> vertex); // 輸出頂點內容
ptr = ptr -> nextnode; // 下一個頂點
}
printf(
" \n " );
}
printf(
" 圖的廣度優先遍歷內容: \n " );
bfs(
1 );
printf(
" \n " );
}

轉載于:https://my.oschina.net/garyun/blog/602961

總結

以上是生活随笔為你收集整理的图的遍历(深度优先搜索法和广度优先搜索法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜性生活片 | 欧美在线免费视频 | av高清 | 东北少妇av| 2023毛片 | 亚洲毛片一区二区 | 国产激情无套内精对白视频 | 99精品视频免费版的特色功能 | 亚洲校园激情 | 筱田优全部av免费观看 | 欧美一区二区三区 | 日韩一区二区三区av | 伊人视频| 欧美一区二区黄色 | 99re超碰 | 成年人av| 99国产精品99 | 欧美激情综合网 | 欧美系列一区二区 | 女人av在线 | 国产色99| 日韩大片免费 | 99精品区 | 亚洲日本在线播放 | 国产精品偷乱一区二区三区 | 成人精品一区二区三区视频 | 中国黄色三级视频 | m3u8成人免费视频 | 青娱乐国产视频 | 精品日韩久久 | 国产制服91一区二区三区制服 | 国产丰满麻豆 | 99久久夜色精品国产亚洲 | 女厕厕露p撒尿八个少妇 | 97影院手机版 | 色偷偷欧美 | 日本韩国在线播放 | 干成人网 | 乱色熟女综合一区二区三区 | wwwxxx在线播放 | 日本少妇激情舌吻 | 日本69视频 | 久久精品人妻一区二区三区 | 精品国产一区二区三区性色 | 九九影院最新理论片 | 久久精品噜噜噜成人 | 欧美一区二区三区 | 亚洲 在线 | 自拍视频网址 | 亚洲成网 | 免费男女视频 | 加勒比在线免费视频 | 欧美理论片在线观看 | 日韩欧美一区二区三区 | 日韩视频精品一区 | 黄色网址你懂得 | 丝袜 亚洲 另类 欧美 重口 | 激情久久一区 | 精品午夜一区二区三区在线观看 | 亚洲射情| 日韩性猛交ⅹxxx乱大交 | 国产爽爽视频 | 欧美成人精品欧美一级私黄 | 看污网站 | 午夜不卡福利视频 | 国产素人自拍 | 精品国产乱码久久久久久88av | 久久成人18免费观看 | 五月天激情社区 | 国产福利不卡 | 免费黄色网页 | aa亚洲 | 免费午夜av | 国产黄在线播放 | 久久久亚洲欧美 | 天天综合亚洲 | 大伊人久久 | 久久视频在线观看免费 | 国产三级按摩推拿按摩 | 特黄特色大片免费播放器使用方法 | 国产真实自拍 | 男人添女人囗交视频 | 国产麻豆久久 | 美女啪啪免费视频 | 51妺嘿嘿午夜福利 | 黑人3p波多野结衣在线观看 | 免费无码毛片一区二三区 | 久久婷婷激情 | 黄色av免费观看 | 欧美成人免费大片 | 免费日韩 | 娇妻玩4p被三个男人伺候电影 | 三级a毛片| 五月天堂色| 日韩在线网址 | 西野翔夫の目の前で犯在线 | 高清免费视频日本 | 国产手机视频在线 | 国产色无码精品视频 |