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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

采用邻接矩阵建立图

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 采用邻接矩阵建立图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

🌱一起加油,共同成長
🎃以后會經常更新噠~🙈
??個人主頁: 收藏加關注,永遠不迷路~??

數據結構系列👀

一:順序表的操作,你真的學會了嗎?
二:順序棧的基本操作
三:循環隊列的基本操作,你學會了嗎?
四:單鏈表的操作(超詳細),保證你看完不后悔
五:5分鐘帶你快速解決二叉樹問題,你確定不進來看看?
六:哈夫曼樹,哈夫曼編碼及解碼詳解

二叉樹的基本操作

  • 數據結構系列👀
  • 前言😺
  • 一、實現步驟🙊
    • 1.定義存儲表示
    • 2.定義操作函數
    • 3.調試實驗代碼并進行相關測試,得出實驗結果。
  • 二、完整代碼🐻
  • 結語🌍


前言😺

Tips:文章有點長,小主耐心一點哦~

(1)采用鄰接矩陣建立圖;
(2)采用深度優先/廣度優先搜索方式遍歷圖;


一、實現步驟🙊

1.定義存儲表示

2.定義操作函數

3.調試實驗代碼并進行相關測試,得出實驗結果。

二、完整代碼🐻

代碼可直接運行😄

#include <stdio.h>#define MAX_VERTEX_NUM 20 #define MaxVex 100 //最大頂點數 #define INFINITY 65535 //表示∞ #define TRUE 1 #define FALSE 0 typedef char VertexType; //頂點類型 typedef int EdgeType; //權值類型 typedef int Bool; Bool visited[MaxVex];typedef struct {VertexType vexs[MaxVex]; //頂點數組EdgeType arc[MaxVex][MaxVex]; //鄰接矩陣int numVertexes, numEdges; //當前圖中的結點數以及邊數 }MGraph;//廣度優先遍歷需要的循環隊列 typedef struct {int data[MaxVex];int front, rear; }Queue;/****************************************/ //隊列的相關操作//初始化 void InitQueue(Queue *Q) {Q->front = Q->rear = 0; }//入隊 void EnQueue(Queue *Q, int e) {if ((Q->rear+1)%MaxVex == Q->front)return ;Q->data[Q->rear] = e;Q->rear = (Q->rear+1)%MaxVex; }//判空 Bool QueueEmpty(Queue *Q) {if (Q->front == Q->rear)return TRUE;elsereturn FALSE; }//出隊 void DeQueue(Queue *Q, int *e) {if (Q->front == Q->rear)return ;*e = Q->data[Q->front];Q->front = (Q->front+1)%MaxVex; } /****************************************///建立圖的鄰接矩陣 void CreateMGraph(MGraph *G) {int i, j, k, w;printf("輸入頂點數和邊數: ");scanf("%d%d", &G->numVertexes,&G->numEdges);fflush(stdin);printf("==============================\n");printf("輸入各個頂點:\n");for (i=0; i<G->numVertexes; ++i){printf("頂點%d: ",i+1);scanf("%c", &G->vexs[i]);fflush(stdin);}for (i=0; i<G->numVertexes; ++i){for (j=0; j<G->numVertexes; ++j)G->arc[i][j] = INFINITY;}printf("==============================\n");for (k=0; k<G->numEdges; ++k){printf("輸入邊(vi, vj)中的下標i和j和權W: ");scanf("%d%d%d", &i,&j,&w);G->arc[i][j] = w;G->arc[j][i] = G->arc[i][j];} }//輸出 void DisMGraph(MGraph *G) {int i, j, k;k = G->numVertexes;for (i=0; i<k; ++i){for (j=0; j<k; ++j){printf("%5d ", G->arc[i][j]);}putchar('\n');} }/****************************************/ //圖的深度優先遍歷 void DFS(MGraph G, int i) {int j;visited[i] = TRUE;printf("%c ", G.vexs[i]);for (j=0; j<G.numVertexes; ++j){if (G.arc[i][j]!=INFINITY && !visited[j])DFS(G, j);} }void DFSTraverse(MGraph G) {int i;for (i=0; i<G.numVertexes; ++i)visited[i] = FALSE;for (i=0; i<G.numVertexes; ++i){if (!visited[i])DFS(G, i);}}//圖的廣度優先遍歷 void BFSTraverse(MGraph *G) {int i, j;Queue Q;for (i=0; i<G->numVertexes; ++i)visited[i] = FALSE;InitQueue(&Q);for (i=0; i<G->numVertexes; ++i){if (!visited[i]){visited[i] = TRUE;printf("%c ", G->vexs[i]);EnQueue(&Q, i);while (!QueueEmpty(&Q)){DeQueue(&Q, &i);for (j=0; j<G->numVertexes; ++j){if (!visited[j] && G->arc[i][j]!=INFINITY){visited[j] = TRUE;printf("%c ", G->vexs[j]);EnQueue(&Q, j);}}}}} } /****************************************///程序入口 int main(){MGraph G;CreateMGraph(&G);printf("\n圖的深度優先遍歷為: ");DFSTraverse(G);printf("\n圖的廣度優先遍歷為: ");BFSTraverse(&G);printf("\n");return 0; }

結語🌍

(1)掌握圖的鄰接矩陣存儲方式;
(2)掌握圖的遍歷算法。🚀🚀🚀


如果有什么問題或者建議,歡迎在評論區留言哦,博主會第一時間回復噠??????

總結

以上是生活随笔為你收集整理的采用邻接矩阵建立图的全部內容,希望文章能夠幫你解決所遇到的問題。

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