1. 程式人生 > >無向圖 深度優先遍歷 c語言實現

無向圖 深度優先遍歷 c語言實現

無向圖的深度優先遍歷的實現,無向圖用鄰接表表示無向圖的表示:鄰接矩陣和鄰接表

程式使用的示例圖為:
這裡寫圖片描述

實現要點:
每個節點有三種狀態:
-1,還未發現
0,已經發現了,正在處理,還沒有處理完
1,已經處理完了
為防止迴圈呼叫dfs,只有在節點是-1狀態時才呼叫dfs函式

程式碼如下:

#include <stdio.h>
#include <stdlib.h>
#include "graph_represent.h"

//後序遍歷圖
void DFS(struct vNode** adj,int v,int* color){

    struct vNode* w;
    color[v] = 0
; printf("%d ",v);/**在這裡前序處理節點**/ w = adj[v]; while(w != NULL){ if(color[w->value]==-1){ DFS(adj,w->value,color); } w = w->next; } /**這裡後序處理節點**/ color[v] = 1; } //引數:鄰接表,節點個數,開始節點, void dfs_wraper(struct vNode** adj,int n,int s){ int
* color = (int*)malloc(sizeof(int)*n); int i; for(i=0;i<n;i++){ color[i] = -1; //將所有的頂點設定為未發現狀態。 } DFS(adj,s,color); /*假設圖是連通的,不連通時,呼叫下面程式碼即可 for(i=0;i<n;i++) DFS(adj,i,color); */ printf("\n"); } void main(){ //獲得預設圖,一共有7個節點 int n = 7; struct
vNode** adjVertics = default_wraper(); printf("\ndeepth first search:\n"); dfs_wraper(adjVertics,n,2); //從2開始遍歷 }

這裡從2開始深度遍歷,結果為:2 0 1 3 5 4 6

相關推薦

深度優先 c語言實現

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

廣度優先 c語言實現

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

廣度優先及其matlab實現

margin cte align style -- als 矩陣 ffffff bre 廣度優先遍歷(breadth-first traverse,bfts),稱作廣度優先搜索(breath first search)是連通圖的一種遍歷策略。之所以稱作廣度優先遍歷是因為

廣度優先及其JAVA實現

isp all 表示 -- 排列 優先 bre image 完成 廣度優先遍歷(breadth-first traverse,bfts),稱作廣度優先搜索(breath first search)是連通圖的一種遍歷策略。之所以稱作廣度優先遍歷是因為他的思想是從一個頂點V0開

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

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

加權深度優先C

#include<stdio.h> int e[50][50],book[50]; int inf=99999999; int n,m,a,b,c,sum=0,min=99999999 ; void dfs(int cur,int step) {     int i;     if(step>

資料結構 深度優先 C

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料結構---的鄰接表(建立、列印、深度優先,廣度優先C語言

當一個圖為稀疏圖時,使用鄰接矩陣會浪費大量儲存空間。 鄰接表法結合了順序儲存和鏈式儲存方法,減少了不必要的浪費。 鄰接表 1)對圖G的每個頂點vi建立一個單鏈表,第i個單鏈表中的結點表示依附於頂點vi的邊(對於有向圖則是以頂點vi為尾的弧)。這個單鏈表就稱為頂點vi

深度優先的非遞迴實現

 採用非遞迴方法實現圖的深度優先遍歷 // // GraphDFSNonRecursion.c // // // Created by yanbinbin // #include <stdio.h> #include <stdlib.h>

深度優先 廣度優先 非遞迴 圖解演算法過程

圖的鄰接矩陣表示 通常圖的表示有兩種方法:鄰接矩陣,鄰接表。 本文用鄰接矩陣實現,一是程式碼量更少,二是程式碼風格也更貼近C語言。但不論是圖的哪種實現方式,其基本的實現思想是不變的。 1:節點的資訊,我們用一維陣列a[n]來儲存,假設圖共有n個節點。 2:節點與節點間的關係

迷宮問題之深度優先解法

*Copyright (c)2017,煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱: *作 者:李佳駿

資料結構實踐——迷宮問題之深度優先解法

【專案 - 迷宮問題之圖深度優先遍歷解法】   設計一個程式,採用深度優先遍歷演算法的思路,解決迷宮問題。   (1)建立迷宮對應的圖資料結構,並建立其鄰接表表示。   (2)採用深度優先遍歷的思路設計演算法,輸出從入口(1,1)點到出口(M,N

迷宮問題Maze (BFS) 廣度優先 C語言

給你一個迷宮, S為起點,E為終點。 請你找出走出迷宮所需要花費的最短步數。 你只能往上下左右四個方向移動。 輸入格式: 第一行有一個數字T,代表有T組測資。 每組測資的第一行有兩個數字R、C, 代表迷宮的大小(R x C)。 接下來R行,每行有C個字元來描述迷宮, '.'代表可以行

AVL樹的旋轉、插入、刪除及C語言實現

一、AVL結構定義 struct AVLNode { int val; struct AVLNode *left,*right; int height;//AVL樹的高度 }; typedef struct AVLNode A

【演算法】二叉樹的遞迴C語言實現

二叉樹是一種極其重要的資料結構,以下是二叉樹的結構定義 建立 和遞迴先序 中序 後序 遍歷的程式碼. #include<stdio.h> #include<stdlib.h> typedef char ElemType; /*二叉樹節點資料

C語言實現鄰接矩陣建立&深度優先

/* '鄰接矩陣' 實現無向圖的建立、深度優先遍歷*/ #include <stdio.h> #include <stdlib.h> #define MaxVex 100 //最多頂點個數 #define INFINITY 32768

建立有的鄰接表,深度優先和廣度優先的遞迴與非遞迴演算法,判斷是否是有,並輸出一種拓撲序列

/*(1)輸入一組頂點,建立有向圖的鄰接表,進行DFS(深度優先遍歷)和BFS(廣度優先遍歷)。 寫出深度優先遍歷的遞迴和非遞迴演算法。 (2)根據建立的有向圖,判斷該圖是否是有向無環圖,若是,則輸出其一種拓撲有序序列。*/ #include<stdio.h>

的鄰接矩陣,深度優先和廣度優先的遞迴與非遞迴演算法

/*(1)輸入一組頂點,建立無向圖的鄰接矩陣。 進行DFS(深度優先遍歷)和BFS(廣度優先遍歷)。 寫出深度優先遍歷的遞迴和非遞迴演算法。*/ #include<stdio.h> #define max 40 //最大頂點個數 #define M 10000

深度優先找出一個中的環

進行深度優先遍歷的時候,當考察的點的下一個鄰接點是已經被遍歷的點,並且不是自己之前的父親節點的時候,我們就找到了一條逆向邊,因此可以判斷該無向圖中存在環路。 visited陣列記錄了節點的訪問狀態,visited[i] = 0表示節點i尚未被訪問過; visi

-鄰接連結串列的深度優先-DFS

一、DFS思想本演算法以無向網為例,儲存方式採用鄰接連結串列1)將該網以鄰接連結串列的方式儲存2)選取A點為起始點,訪問此頂點,用一個visit的bool型陣列記錄訪問狀態(false表示未被訪問,true表示已訪問)3)從A的未被訪問的鄰接點出發,深度優先遍歷圖,直到圖中所