1. 程式人生 > >鄰接矩陣,鄰接表表示圖,深度優先遍歷

鄰接矩陣,鄰接表表示圖,深度優先遍歷

#include <stdio.h>
#include <stdlib.h>
bool visited[vernum];


int main()
{
    printf("Hello world!\n");
    return 0;
}




void Visit(int vextex){
    printf("正在訪問頂點%d\n",v);
}




//鄰接矩陣的深度優先遍歷,無向圖,,(預設從頂點0開始遍歷)
void DFS(MGraph Graph,void (*visit)(int v)){ //鄰接表只需一個頂點就可以表示邊,


    for(i=0;i<v;i++){
        for(j=0;j<v;j++){
            if(!visited[G.vertices[i][j]&&G.vertices[i][j].adj != 0){  //j是i的鄰接點且沒有被訪問過
                visit(G.vertices[i][j]);
                //visited[i][j]=true;  //雙重for迴圈 肯定能對鄰接矩陣完全遍歷
            }
        }
    }
}


//鄰接表的深度優先遍歷(預設從頂點0開始遍歷)
void DFS1(LGraph G,void (*visit)(ArcNode p)){
    for(p=G.vertices[i].firstarc;p;p=p->nextarc){
        visit(p);
    }


}


//圖的鄰接矩陣表示法
void CreatMGraph(MGraph &G){
    //初始化圖
    for(i=0;i<vexnum;i++){
        for(j=0;j<vexnum;j++){
            G.arcs[i][j]={0,NULL};
        }
    }
    //構建圖
    for(i=0;i<G.arcnum;i++){
        printf("輸入結點(vi,ji)的頂點i,j\n");
        scanf("%d%d",&i,&j);
        G.arcs[i][j].adj=weight;
        //置<v1,v2>的對稱弧<v2,v1>也為1
        //若有相關資訊,
        G.arcs[j][j].adj=weight;
    }




}


//圖的鄰接表表示法
void CreatLGraph(LGraph &G){
    int i,j;
    ArcNode *p;
    for(i=0;i<G.Nv;i++){
        G.vertices[i].firstarc=NULL; //初始化鄰接表
    }


    for(i=0;i<G.Ne;i++){
        printf("輸入邊(vi,vj)的頂點序號i,j");
        scanf("%d %d",&i,&j);
        p=(ArcNode*)malloc(sizeof(ArcNode));
        p->adjvex=j;
        p->nextarc=G.vertices[i].firstarc;
        G.vertices[i].firstarc=p;
        //如果是無向圖,
        p->adjvex=i;
        p->nextarc=G.vertices[j].firstarc;
        G.vertices[j].firstarc=p;
    }


}






































相關推薦

演算法:1、鄰接實現深度優先廣度優先

另一篇文章:是全部採用遞迴實現dfs,bfs:http://blog.csdn.net/codeforme/article/details/6036864#,這篇文章存在記憶體洩漏問題 我的bfs採用佇列實現,並且解決了記憶體洩漏問題 Graph.h /**********

——鄰接表示(實現深度優先、廣度優先

程式碼有部分解析:#include<iostream> #include<stdio.h> #include<stdlib.h> #include<iomanip> using namespace std; #define T

鄰接實現--深度優先DFS和廣度優先BFS

          圖論中一個基本的概念就是遍歷。就是訪問到圖的每一個頂點,同時每個頂點只訪問一次。           DFS和BFS的概念和思路網上說明的很詳細了。但是網上很多程式碼實現有缺陷,基本都沒有考慮圖不連通的情況,比如某個頂點A和其它任何一個頂點都不關聯,

深度優先鄰接矩陣遞迴非遞迴)

參考部落格:圖的深度優先遍歷(遞迴、非遞迴;鄰接表,鄰接矩陣) 本篇預設連通圖,非連通情況會在鄰接表處補上   1.鄰接矩陣的遞迴解法 #include<stdio.h> #define MAX 100 typedef struct { int e[MAX][MA

深度優先鄰接遞迴非遞迴)

參考部落格:圖的深度優先遍歷(遞迴、非遞迴;鄰接表,鄰接矩陣) 本程式碼有個問題:就是結點是對應儲存下標的,要解決這個問題,可以增加一個定位函式(LocateVec),不修改也可以使程式碼簡潔些 關於非連通圖的bug已修改,就是增加了dfsTraverse函式迴圈遍歷一遍結點:沒訪問過則再做一次dfs

資料結構——PTA 鄰接矩陣儲存深度優先鄰接儲存的廣度優先

廣度優先與深度優先是遍歷圖的兩種基本方法,大致的思想是DFS為遞迴,而BFS是佇列。 這裡給出PTA兩道題目的答案,方法很基本,但第三個形參還是第一次見,去網上搜了搜給出的說法是呼叫函式的地址,但個人感覺就是呼叫這個函式。。。 下面給出兩段程式碼 void BFS ( LGraph

6-2 鄰接儲存的廣度優先 (20 分)

試實現鄰接表儲存圖的廣度優先遍歷。 函式介面定義: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ); 其中LGraph是鄰接表儲存的圖,定義如下: /* 鄰接點的定義 */ typedef struc

6-1 鄰接矩陣儲存深度優先 (20 分)

試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰接矩陣儲存的圖,定義如下: typedef struct GNode *PtrToG

6-2 鄰接儲存的廣度優先 (20 分)第七章----基本概念-計算機17級

6-2 鄰接表儲存圖的廣度優先遍歷 (20 分) 試實現鄰接表儲存圖的廣度優先遍歷。 函式介面定義: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ); 其中LGraph是鄰接表儲存的圖,定

6-1 鄰接矩陣儲存深度優先 (20 分) 第七章----基本概念-計算機17級

6-1 鄰接矩陣儲存圖的深度優先遍歷 (20 分) 試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰接矩陣儲存的圖

資料結構 鄰接矩陣儲存深度優先

練習6.1 鄰接矩陣儲存圖的深度優先遍歷 (20 point(s)) 試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰

1-7 鄰接矩陣儲存深度優先 (10 分)

試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰接矩陣儲存的圖,定義如下: typedef struct GNode *PtrToGNod

6-1 鄰接儲存的廣度優先 (20 分)

6-1 鄰接表儲存圖的廣度優先遍歷 (20 分) 試實現鄰接表儲存圖的廣度優先遍歷。 函式介面定義: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) );

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

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

6-16 鄰接儲存的廣度優先

鄰接表儲存圖的廣度優先遍歷 (20 分) 試實現鄰接表儲存圖的廣度優先遍歷。 函式介面定義: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ); 其中LGraph是鄰接表儲存的圖,定義如下: /* 鄰

6-14 鄰接矩陣儲存深度優先

鄰接矩陣儲存圖的深度優先遍歷 (20 分) 試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰接矩陣儲存的圖,定義如下: ty

資料結構 鄰接矩陣儲存深度優先

練習6.1 鄰接矩陣儲存圖的深度優先遍歷 (20 point(s)) 試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰接矩

6-1 鄰接矩陣儲存深度優先 (20 分) 第七章----基本概念-計算機17級

6-1 鄰接矩陣儲存圖的深度優先遍歷 (20 分) 試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visi

深度優先DFS(鄰接實現)c語言

要實現該演算法首先要知道鄰接表的概念。鄰接表是一種常用的圖的儲存結構,它的結構特點是:頂點由一個一維陣列儲存;鄰接點用連結串列儲存相比於單純用陣列實現的鄰接矩陣,鄰接表可以避免空間浪費其圖解如下:firstedge指向邊表第一個結點。邊表的adjvex的值代表與V0頂點有邊的

深度優先DFS (鄰接矩陣實現) c語言

圖的遍歷是指從圖中的某一頂點出發,按照一定的策略訪問圖中的每一個頂點。每個頂點有且只能被訪問一次。深度優先遍歷也叫深度優先搜尋(Depth First Search)。它的遍歷規則:先選擇一個初始頂點,再規定一個方向,例如往右邊一直遍歷。於是就往右邊一直走,把訪問過的頂點做好