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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

邻结矩阵的建立和 BFS,DFS;;

發(fā)布時(shí)間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 邻结矩阵的建立和 BFS,DFS;; 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
鄰結(jié)矩陣比較簡(jiǎn)單,, 它的BFS,DFS, 兩種遍歷也比較簡(jiǎn)單,一個(gè)用隊(duì)列, 一個(gè)用數(shù)組即可!!!
但是鄰接矩陣極其浪費(fèi)空間,尤其是當(dāng)它是一個(gè)稀疏矩陣的時(shí)候!!!
---------------------------------------------------------------------------------------------------------------------------------------
//鄰接矩陣的建立和 其BFS, DFS, 遍歷 #include <cstdio> #include <cstdlib> //#define _OJ_int visit[100]; int cnt = 0; typedef struct Graph1 {int nv;int ne;int a[100][100]; } Graph1, *Graph; //建立一個(gè)圖含頂點(diǎn), 邊, 和鄰接矩陣Graph creat_graph(void) {Graph g;int i, j;int v1, v2;g = (Graph) malloc (sizeof(Graph1));scanf("%d %d", &g->nv, &g->ne);for(i = 0;i < g->nv; i++) {for(j = 0;j < g->nv; j++) {g->a[i][j] = 0;}} //對(duì)鄰結(jié)矩陣賦初始值for(i = 0;i < g->ne; i++) {scanf("%d %d", &v1, &v2);g->a[v1][v2] = 1;g->a[v2][v1] = 1;} //建立一個(gè)無向矩陣return g; }void DFS(Graph g, int i) {int j;// lif(cnt == g->nv - 1)// printf("%d\n", i);// else { //此地有一個(gè)小技巧就是判斷什么時(shí)候結(jié)束?// printf("%d ", i); //用一個(gè)全局變量cnt 由于每一個(gè)點(diǎn)遍歷一次// cnt++; cnt == g->nv - 1 時(shí)結(jié)束;用此處理最后一個(gè)不要空格和換行// }printf("%d ", i);visit[i] = 1;for(j = 0;j < g->nv; j++) {if(g->a[i][j] == 1 && visit[j] == 0)DFS(g, j);} }void DFS_travers(Graph g) {int i;for(i = 0;i < g->nv; i++)visit[i] = 0;for(i = 0;i < g->nv; i++) {if(visit[i] == 0)DFS(g, i);} }typedef struct Queue1 {int top;int base;int *elem; } Queue1, *Queue;Queue creat_Queue(void) {Queue q;q = (Queue) malloc (sizeof(Queue1));q->elem = (int*) malloc (100 * sizeof(int));q->base = q->top = 0;return q; }int isempty(Queue q) {if(q->base == q->top)return 1;elsereturn 0; }void Enqueue(Queue q, int data) {q->elem[q->top++] = data; }int Dequeue(Queue q) {return q->elem[q->base++]; }void BFS(Graph g, int v) {int i, j;Queue q;q = creat_Queue();printf("%d ", v);visit[v] = 1;Enqueue(q, v);while (isempty(q) != 1) {i = Dequeue(q);for(j = 0;j < g->nv; j++) {if(g->a[i][j] && visit[j] == 0 ) {printf("%d ", j); //把整排先全都遍歷完,在遍歷其它的visit[j] = 1; //每次先遍歷在入隊(duì)Enqueue(q, j);}}}}void BFS_travers(Graph g) {int i;for(i = 0;i < g->nv; i++)visit[i] = 0;for(i = 0;i < g->nv; i++) {if(visit[i] == 0)BFS(g, i);} }int main(int argc, char const *argv[]) { #ifndef _OJ_ //ONLINE_JUDGEfreopen("input.txt", "r", stdin); #endifGraph g;g = creat_graph();DFS_travers(g);printf("\n");BFS_travers(g);return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/airfand/p/5020420.html

總結(jié)

以上是生活随笔為你收集整理的邻结矩阵的建立和 BFS,DFS;;的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。