1. 程式人生 > >圖的儲存和遍歷C++實現

圖的儲存和遍歷C++實現

最近在做一些OJ題目時,感覺自己圖的應用還不夠熟練。所以又翻書看別人的部落格複習了一下,現把圖的常用內容總結如下:

圖的常用儲存方法有:鄰接矩陣和鄰接表

遍歷方法有:按深度遍歷(DFS),按廣度遍歷(BFS)

下面的程式碼都是C++寫的,用了一些STL庫的容器:

鄰接矩陣:

#include <stdio.h> #include <stdlib.h> typedefstructGraph { char vexs[100];            //頂點表 int   arc[100][100];         //鄰接矩陣,可看作邊
intnumVertexes, numEdges;      //圖中當前的頂點數和邊數 }g; //定位 intlocates(Graph *g, charch) { inti = 0; for(i = 0; i < g->numVertexes; i++) { if(g->vexs[i] == ch) { break; } } if(i >= g->numVertexes) { return-1; } returni; } //建立一個無向網圖的鄰接矩陣表示
voidCreateGraph(Graph *g) { inti, j, k, w; printf("輸入頂點數和邊數:\n"); scanf("%d,%d", &(g->numVertexes), &(g->numEdges)); for(i = 0; i < g->numVertexes; i++) { g->vexs[i] = getchar(); while(g->vexs[i] == '\n') {

相關推薦

儲存C++實現

最近在做一些OJ題目時,感覺自己圖的應用還不夠熟練。所以又翻書看別人的部落格複習了一下,現把圖的常用內容總結如下: 圖的常用儲存方法有:鄰接矩陣和鄰接表 遍歷方法有:按深度遍歷(DFS),按廣度遍歷(BFS) 下面的程式碼都是C++寫的,用了一些STL庫的容器:

儲存

圖的儲存 圖的儲存一般有兩種方式:鄰接矩陣和鄰接表 鄰接矩陣 設圖G(V,E)的頂點標號為0,1,……n-1,則令二維陣列G[n][n]的兩維分別表示圖的頂點標號。 即如果G[i][j]等於1,指頂點i和頂點j之間有邊,如果G[i][j]等於0,指頂

無向 廣度優先 c語言實現

這裡記錄一下無向圖的廣度優先遍歷,無向圖用鄰接表表示,使用的圖的示例圖如下,關於圖的表示可以參照部落格:無向圖的表示:鄰接矩陣和鄰接表,這裡不再贅述,無向圖的表示的程式碼被封裝到標頭檔案queue.h

無向 深度優先 c語言實現

無向圖的深度優先遍歷的實現,無向圖用鄰接表表示無向圖的表示:鄰接矩陣和鄰接表。 程式使用的示例圖為: 實現要點: 每個節點有三種狀態: -1,還未發現 0,已經發現了,正在處理,還沒有處理

集合巢狀儲存元素的示例

1 /** 2 * @Auther: lzy 3 * @Date: 2018/12/12 16:07 4 * @Description: 集合巢狀儲存和遍歷元素的示例 5 */ 6 public class ListTest { 7 public static void m

集合中的集合_儲存(增強型for迴圈迭代器)

package GuanQia3_test2_集合中套集合_第一次沒想明白; /* * 一個學科中有若干班級,每一個班級又有若干學生。整個學科一個大集合, * 若干個班級分為每一個小集合(集合巢狀之HashSet巢狀HashSet)。要求如下 * 1、 學生類有兩個屬

Java中ArrayList集合巢狀儲存

student類: package day16_Test; /* * 學生類: * 成員變數:姓名、年齡 * 成員方法 * 構造方法 * *

PAT 1138 Postorder Traversal(二叉樹的儲存

題意:給出二叉樹的前序和中序遍歷,給出其後序遍歷的第一個元素。 思路:根據前序和中序遍歷的結果得到二叉樹的具體構造,再進行後序遍歷。 程式碼: #include <cstdio> #in

二叉樹c++實現

//自己還真是個菜雞,大一學了一年c++,現在還在基礎的語法上轉圈,還沒有意識到c++真正的 //的強大之處在於它的多變,封裝,等演算法告一段落了在考慮是往Java上走還是深造c++ #include <iostream> #include <stack&

HashSet的儲存

1、特點 1、HashSet實現 Set 介面,由雜湊表(實際上是一個 HashMap 例項)支援。 2、它不保證 set 的迭代順序;特別是它不保證該順序恆久不變。此類允許使用 null 元素

二叉樹非遞迴c++實現

三種遍歷演算法均採用棧來實現 1.前序遍歷:先訪問根節點,再訪問左子樹,最後訪問右子樹 先將根節點進棧,棧不空時迴圈:{出棧tmp,訪問tmp,若其右子樹節點不空則將tmp的右孩子節點進棧,若其左孩子節點不空則將tmp的左孩子節點進棧。} 2.中序遍歷演算法:左中右 從根節

資料結構之 二叉樹的儲存總結

知道前序(包括空結點 下面程式碼用’,’代替)建立一個二叉樹,前序 中序 後序 層序輸出 如何求葉子結點數, 如何求二叉樹深度。 #include<stdio.h> #include<stdlib.h> #include<st

二叉樹的深度優先與廣度優先 [ C++ 實現 ]

  /**  * <!--  * File   : binarytree.h  * Author : fancy  * Email  : [email protected]  * Date   : 2013-02-03  * --!>  */ #include <stdio.h>

二叉樹-c實現

bin lib malloc code mage -a oid inf 樹遍歷 這裏主要是三種遍歷,先序(preorder,NLR),中序(Inorder,LNR),後序(Postorder,LRN) N:node,L:left,R:right 基本排序:先序(NLR,

的鄰接表儲存 深度優先 廣度優先 C語言實現

ALGraph.h #pragma once #include "Queue.h" /************************************************************************/ /

JS實現的建立

圖分為無向圖和有向圖  圖的儲存結構有鄰接矩陣、鄰接表、十字連結串列、鄰接多重表這四種,最常用的是前兩種 本篇主要是利用鄰接矩陣實現無向圖的建立和遍歷(深度優先、廣度優先),深度優先其實就是二叉樹裡的前序遍歷          利用鄰接

資料結構作業14—的概念 儲存結構

2-1若無向圖G =(V,E)中含7個頂點,要保證圖G在任何情況下都是連通的,則需要的邊數最少是: (3分) A.16 B.21 C.15 D.6 作者: DS課程組 單位: 浙江大學 2-2對於有向圖,其鄰接矩陣表示比鄰接表

資料結構作業14—的概念 儲存結構(判斷題)

1-1用鄰接矩陣法儲存圖,佔用的儲存空間數只與圖中結點個數有關,而與邊數無關。 (1分) T F 作者: DS課程組 單位: 浙江大學 1-2用鄰接表法儲存圖,佔用的儲存空間數只與圖中結點個數有關,而與邊數無關。 (1分) T

的深度優先廣度優先程式碼實現

#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <queue> using nam

C++類實現二叉樹的構建

#include<iostream> #include<fstream> #include<string.h> using namespace std; /*