1. 程式人生 > >資料結構與演算法一一圖

資料結構與演算法一一圖








二、圖的儲存結構<鄰接矩陣>





三、圖的儲存結構<鄰接表>





四、圖的遍歷






// ---------------------鄰接矩陣儲存結構------------------------

typedef char VertexType;	// 頂點型別
typedef int EdgeType;		// 邊上的權值型別
#define MAXVEX 100			// 最大頂點數
#define INFINITY 65535		// 用 65535 代表無窮

typedef struct 
{
	VertexType vexs[MAXVEX];		// 用來存頂點的陣列
	EdgeType arc[MAXVEX][MAXVEX];	// 鄰接矩陣, 可看作邊表
	int numVertexes, numEdges;		// 圖中當前的頂點數和邊數
} MGraph;

// 鄰接矩陣的廣度遍歷演算法
void BFSTraverse (MGraph G)
{
	int i, j;
	int visited[50];
	Queue Q;	// 建立一個佇列

	// 遍歷頂點
	for (i = 0; i < G.numVertexes; ++i)
	{
		// 給所有頂點是否被訪問過作標誌
		visited[i] = FALSE;
	}

	// 初始化佇列
	initQueue( &Q );

	for (i = 0; i < G.numVertexes; ++i)
	{
		// 如果沒有訪問過的頂點
		if (!visited[i])
		{
			printf("%c\n", G.vexs[i]);	// 列印頂點
			visited[i] = TRUE;	// 將頂點昨個訪問標記
			EnQueue(&Q, i);		// 將此頂點插入佇列

			// 如果當前佇列不為空
			while( !QueueEmpty(Q))
			{
				// 將隊中元素出佇列, 賦值給i
				DeQueue(&Q, &i);
				for (j = 0; j < G.numVertexes; ++j)
				{
					// 判斷其他頂點若與當前頂點存在邊且未訪問過
					if (G.arc[i][j] == 1 && !visited[j])	
					{
						printf("%c\n", G.vexs[j]);	// 列印頂點
						visited[j] = TRUE;	// 將頂點昨個訪問標記
						EnQueue(&Q, j);		// 將此頂點插入佇列
					}
				}
			}
		}
	}

}

相關推薦

資料結構演算法一一

二、圖的儲存結構<鄰接矩陣>三、圖的儲存結構<鄰接表>四、圖的遍歷// ---------------------鄰接矩陣儲存結構------------------------

18_資料結構演算法_(鄰接表)_Python實現

# Title : TODO # Objective : TODO # Created by: Chen Da # Created on: 2018/11/10 #頂點類 class Vertex(object): def __init__(self,key): s

資料結構演算法15-的基本資料操作

基本資料操作 ADT  圖(Graph) Data        頂點的有窮非空集合和邊的集合 Operation           CreateGraph(*G,V,VR):V點集,VR邊弧集的定義構造圖G           DestroyGraph(*G)

資料結構演算法18-的遍歷

從圖中某一個頂點出發訪遍圖中其餘頂點,且使每個頂點權被訪問一次,這一過程就叫做圖的遍歷(Traversing   Graph)。 深度優先遍歷(Depth_First_Search) 從圖中某個頂點v出發,訪問此頂點,然後從v的未被訪問的鄰接點出發深度優先遍歷圖,直至

資料結構演算法19-的最小生成樹

我們把構造連通網的最小代價生成樹稱為最小生成樹(Minimum  Cost   Spanning Tree) 普里姆(Prim)演算法 也就是說,現在我們已經有一個儲存結構 MGraph的G,它的arc二維陣列如圖所示。陣列中我們用65535代表∞ 於是普

資料結構演算法22-的關鍵路徑

關鍵路徑 拓撲排序主要是為解決一個工程能否順序進行的問題,但有時我們還需要解決工程完成需要的最短時間問題。比如造一輛汽車,我們需要先造各種各樣零件、部件,最終再組裝成車,假如,造一個輪子需要0.5天時間,造一個發動機需要3天時間,造一個車底盤需要2天時間,造一個外殼需要2天時間,其他零部件時間需

資料結構演算法21-的拓撲排序

拓撲排序 學了兩個有環的圖應用,現在我們來談談無環的圖應用。無環,即是圖中沒有迴路的意思。 拓撲排序介紹 在一個表示工作的有向圖中,用頂點表示活動,用弧表示活動之間的優先關係,這樣有向圖為頂點表示活動的網,我們稱為AOV網(Activity    On&nb

資料結構演算法20-的最短路徑

最短路徑 對於網圖來說,最短路徑,是指兩頂點之間經過的邊上權值之和最少的路徑,並且我們稱路徑上的第一個頂點是源點,最後一個頂點是終點。 迪傑斯特拉演算法   它並不是一下子就求出V0到V8的最短路徑,而一步步求出它們之間頂點的最短路徑,過程中都是基於已經求出的最短路徑

資料結構演算法17-的十字連結串列

對於有向圖來說,鄰接表是有缺陷的,關心了出度問題,想了解入度就必須要遍歷整個圖才能知道,反之,逆鄰接表解決了入度的情況。 把鄰接表與逆鄰接表結合起來,即有向圖的一種儲存方法十字連結串列(Orthogonal   List)。 我們重新定義頂點表結構 firsti

資料結構演算法16-的儲存結構

圖的儲存結構 圖的儲存結構相較線性表與樹來說就更加複雜了。首先,我們口頭上說的“頂點的位置”或“鄰接點的位置”只是一個相對的概念。其實從圖的邏輯結構定義來看,圖上任何一個頂點都可被看成是第一個頂點,任一頂點的鄰接點之間也不存在次序關係。如下圖   用之前學過的資料結構來表

Javascript之資料結構演算法(Graph)實現

Javascript之資料結構與演算法的圖(Graph)實現 簡介 廣度優先搜尋演算法實際應用-最短路徑(非權值) 深度優先搜尋演算法實際應用-拓撲排序(有向無環圖) Dijkstra 演算法 Floyd-Warshall

資料結構演算法一一遞迴操作

一、斐波那契數列// 迭代實現 void iterationFib() { int a[10] = {1, 1}; int len = sizeof(a) / sizeof(int); print

資料結構演算法

    一、概念     定義: 圖由點集合和邊集合組成,記做G=(V,E),其中點集合不能為空且應該有窮,邊集合可以為空。     ①有向圖:邊有方向,用<Vi,Vj>表示     ②

(c++)資料結構演算法:鄰接矩陣、深度廣度遍歷、構造最小生成樹(prim、kruskal演算法

//圖的鄰接矩陣實現 //廣度遍歷bfs和深度遍歷dfs //構造最小生成樹的prim、kruskal演算法 #include <iostream> #include<stack> #include<queue> #define WEI

資料結構演算法計算

圖演算法,在實際的程式設計中還是會經常遇到的,最主要的就是兩種圖的遍歷演算法。舉個例子,Java程式設計師必須掌握的垃圾回收(Garbage Collection,GC)裡面,就非常依賴圖演算法。所以,

資料結構演算法那》第七次 廣度、深度優先遍歷 的遍歷(下)

《資料結構與演算法那》第七次課實驗內容 圖及圖的遍歷(下) 實驗目的: 熟悉圖的兩種儲存結構:鄰接矩陣和鄰接連結串列。 掌握在圖的鄰接表儲存結構上的遍歷演算法的實現。 實驗內容: 在已經開發好的c++類adjacencyGraph中,新增兩個成員函式,B

資料結構演算法》第六次 的遍歷(上)

《資料結構與演算法那》第六次課實驗內容 圖及圖的遍歷(上) 實驗目的: 熟悉圖的兩種儲存結構:鄰接矩陣和鄰接連結串列。 掌握在圖的鄰接表儲存結構上的遍歷演算法的實現。 實驗內容: 開發c++類adjacencyGraph,用鄰接矩陣描述一個無向圖,要求可

資料結構演算法——有向鄰接表輸出其拓撲排序序列

  測試資料 輸入: 12 16 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c1 c4 c1 c2 c1 c3 c1 c12 c4 c5 c2 c3 c3 c5 c3 c7 c5 c7 c3 c8 c9 c12 c9 c10 c10 c12 c

資料結構演算法設計》實驗報告書之的遍歷操作

《資料結構與演算法設計》實驗報告書之圖的遍歷操作 實驗專案 圖的遍歷操作 實驗目的 掌握有向圖和無向圖的概念;掌握鄰接矩陣和鄰接連結串列建立圖的儲存結構;掌握DFS及BFS對圖的遍歷操作;瞭解圖結構在人工智慧、工程等領域的廣泛應用。 實驗內容 採用鄰接矩陣和鄰接連結串列其中一種作

為什麼我要放棄javaScript資料結構演算法(第九章)——

本章中,將學習另外一種非線性資料結構——圖。這是學習的最後一種資料結構,後面將學習排序和搜尋演算法。 第九章 圖 圖的相關術語 圖是網路結構的抽象模型。圖是一組由邊連線的節點(或頂點)。學習圖是重要的,因為在任何二元關係都可以用圖來表示。 任何社交網路都可以用圖來表示。 我們還可以用圖來表示道路、航班以及通訊