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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

简单的深度优先遍历和广度优先遍历

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的深度优先遍历和广度优先遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼來源于《啊哈!算法》。

1、深度優先遍歷:

(1)無權值

#include<stdio.h> int book[101],n, e[1001][1001], sum; void DFS(int cur) {int h;sum++;printf("%d ", cur);//目前所在點進行的操作,可以更復雜if (sum == n)return;for (h = 1; h <= n; h++)if (book[h] == 0 && e[cur][h] == 1){book[h] = 1;DFS(h);}return; } int main(void) {int m;int a, b;printf("頂點數:");scanf_s("%d", &n);printf("邊數:");scanf_s("%d", &m);for(int i=1;i<=n;i++)for (int j = 1; j < n; j++){if (i == j)e[i][j] = 0;elsee[i][j] = 99999999;}for (int k = 1; k <= m; k++){scanf_s("%d%d", &a, &b);e[a][b] = 1;e[b][a] = 1;}book[1] = 1;DFS(1);getchar(); getchar();return 0; }

(2)有權值

void DFS(int cur, int dis) {if (dis > min)//dis是目前所走的距離,min是已經查出的路線中最小的路徑和return;if (cur = destination)//destination是目的地的編號{if (dis < min)min = dis;return;}for (int i = 1; i <= n; i++)if (book[i] == 0 && e[cur][i] != inf){book[i] = 1;DFS(i, dis + e[cur][i]);book[i] = 0;}return; }
2、廣度優先遍歷

#include<stdio.h> int main(void) {int n, m;int a, b;int i, j;int cur;int book[101] = { 0 };int e[101][101];int que[10001], head, tail;printf("頂點數:");scanf_s("%d", &n);printf("邊數:");scanf_s("%d", &m);for(int i=1;i<=n;i++)for (int j = 1; j < n; j++){if (i == j)e[i][j] = 0;elsee[i][j] = 99999999;}for (int k = 1; k <= m; k++){scanf_s("%d%d", &a, &b);e[a][b] = 1;e[b][a] = 1;}head = 1;tail = 1;que[tail] = 1;tail++;book[1] = 1;while (head < tail){cur = que[head];for(i=1;i<=n;i++)if (book[i] == 0&&e[cur][i] == 1){que[tail] = i;tail++;book[i] = 1;}if (tail > n)break;head++;//并沒有真正意義上的出隊。}for (i = 1; i <tail; i++)printf("%d ", que[i]);getchar(); getchar();return 0; }

總結

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

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