1. 程式人生 > >實驗四:圖的基本儲存結構及圖的遍歷運算

實驗四:圖的基本儲存結構及圖的遍歷運算

用臨接矩陣儲存圖,輸出深度優先遍歷的頂點序列:

#include <cstdlib>
#include <iostream>

using namespace std;
typedef struct
{
       int n,e;
}Graph;
Graph G;
int Adj[50][50];
int visited[50];
int dfs(Graph G,int v)
{
    int w;
   visited[v]=1;
    printf("%d",v);
   for(w=1;w<=G.n;w++)
    {
        if(Adj[v][w]==1&&visited[v]==0)
        dfs(G,w);
    }
}
        
        
int main(int argc, char *argv[])
{
    inti,j;
   scanf("%d%d",&G.n,&G.e);
   for(i=1;i<=G.n;i++)
   for(j=1;j<=G.n;j++)
    {
        scanf("%d",&Adj[i][j]);
    }
   for(i=1;i<=G.n;i++)
   visited[i]=0;
   for(i=1;i<=G.n;i++)
   dfs(G,i);
   system("PAUSE");
    returnEXIT_SUCCESS;
}

用鄰接表儲存圖,輸出深度優先遍歷的頂點序列

#include <cstdlib>
#include <iostream>

using namespace std;
typedef struct ArcNode//表結點的型別定義
{
    int adjvex;//該弧所指向的頂點的位置
    struct ArcNode *nextarc;//指向下一弧的指標
}ArcNode;    
typedef struct
{
     ArcNode  *firstarc;//指向第一條依附該頂點的弧的指標
}AdjList[50];   //頭結點
typedef struct
{
     int vexnum,arcnum,weight;
     AdjList  vertices;
}Graph;    //圖的儲存結構定義
Graph g;
int n,e;
int visited[50];
int dfs(Graph g,int v)
{
    int w;
    ArcNode*p;
   visited[v]=1;
   printf("%d",v);
   for(p=g.vertices[v].firstarc;p;p=p->nextarc)
   if(w=p->adjvex&&visited[w]==0)dfs(g,w);
}
int dfstraves(Graph g)
{
    int v;
   memset(visited,0,sizeof(visited));
   for(v=0;v<n;++v)
   if(visited[v]==0) dfs(g,v);
}
int create(Graph g)
{
    inti,j;
    ArcNode*p;
   for(i=0;i<n;i++)
    {
               g.vertices[i].firstarc=NULL;
    }
   for(i=0;i<e;i++)
    {
                   scanf("%d%d%d",&g.vexnum,&g.arcnum,&g.weight);
                   p=g.vertices[g.vexnum].firstarc;
                   while(p!=NULL) p=p->nextarc;
                   p=(ArcNode *)malloc(sizeof(ArcNode));//p 原來指向NULL現在要方一些資料,必須有空間
                   p->adjvex=g.arcnum;
                   p->nextarc=NULL;
    }
}
int main(int argc, char *argv[])
{
   scanf("%d%d",&n,&e);
   create(g);
   dfstraves(g);
   system("PAUSE");
    returnEXIT_SUCCESS;
}

相關推薦

實驗基本儲存結構運算

用臨接矩陣儲存圖,輸出深度優先遍歷的頂點序列: #include <cstdlib> #include <iostream> using namespace std; typedef struct {        int n,e; }Graph; Graph G; int Adj[

儲存結構演算法

一、圖的儲存結構 1.1 鄰接矩陣     圖的鄰接矩陣儲存方式是用兩個陣列來表示圖。一個一維陣列儲存圖中頂點資訊,一個二維陣列(鄰接矩陣)儲存圖中的邊或弧的資訊。     設圖G有n個頂點,則鄰接矩陣是一個n*n的方陣,定義為:     看一個例項,下圖左就

【資料結構作業五】以鄰接表作儲存結構,廣度的優先搜尋序列

#include <iostream> #define MVNum 100 #define MAXQSIZE 100 using namespace std; typedef char ElemType; typedef int QElemType; typed

資料結構 筆記二叉樹結構的層次

二叉樹的遍歷 -二叉樹的遍歷(Traversing Binay Tree)是指從根節點觸發,按照某種次序一次訪問二叉樹中的所有結點,使得每個結點被訪問一次,且僅被訪問一次。 通用樹結構的層次遍歷演算法是否可以用在二叉樹結構上? 如果可以,程式碼需要做怎樣的改動? 提供一組遍歷相關的函

的兩種儲存結構種形態——鄰接矩陣、鄰接表;有向、無向、有向網、無向網。

宣告: 程式碼中有大量的註釋,所以此處就不再作出大量的解釋了。 一 :鄰接矩陣儲存結構 1.首先是各種型別與巨集的定義: 1 #include <iostream> 2 using namespace std; 3 //無窮大 4 #define INFINITY IN

實驗Tensorflow實現了個對抗像制作算法--readme

嘗試 pda mode mini score one 而在 craft iter 文章來源:Github Four adversarial image crafting algorithms are implemented with Tensorflow. The four

資料結構 筆記儲存結構

基本思想 -用一維陣列儲存頂點:描述頂點相關的資料 -用二維陣列儲存邊:描述頂點間的關係和權 鄰接矩陣法 -設圖A = (V,E)是一個有n個頂點的圖,圖的鄰接矩陣為Edge[n][n],則: Edge[i][i] = w,w權值,i和j連線;空,i == j或i 和j不連線

資料結構篇(2)基本操作 深度和廣度

程式碼實現 main.cpp(主函式) #include <iostream> #include "CMap.h" using namespace std; /** 圖的的儲存:鄰接矩陣 圖的遍歷:深度+廣度 A / \

資料結構線性表的順序儲存結構實現

線性表的順序儲存結構——順序表 線性表的順序儲存結構稱為順序表 順序表的實現 const int MaxSize=100; template<class DataType> class SeqList { public: SeqList(){lengt

資料結構 的鄰接表儲存結構DFS/BFS

//鄰接表 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #define INF 999 using namespace std; typedef

儲存結構鄰接矩陣與鄰接表(稠密與稀疏

稠密圖用 鄰接矩陣儲存 稀疏圖用 鄰接表儲存 原因: 鄰接表只儲存非零節點,而鄰接矩陣則要把所有的節點資訊(非零節點與零節點)都儲存下來。 稀疏圖的非零節點不多,所以選用鄰接表效率高,如果選用鄰接矩陣則效率很低,矩陣中大多數都會是零節點! 稠密圖的非零界點多,零節點少,選

C語言實現的鄰接矩陣儲存結構深度優先和廣度優先

DFS的核心思想在於對訪問的鄰接節點進行遞迴呼叫;BFS的核心思想在於建立了一個鄰接節點的佇列。 在Dev C++中除錯執行通過。 用下圖進行了測試。 #include <stdio.h> #define MaxVertexNum 50 #defin

資料結構儲存結構之鄰接矩陣

一、圖(Graph)是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為:G(V,E),其中,G表示一個圖,V是圖G中頂點的集合,E是圖G中邊的集合。在圖中的資料元素,我們稱之為頂點(Vertex),頂點集合有窮非空。在圖中,任意兩個頂點之間都可能有關係,頂點之

資料結構例程——的鄰接矩陣儲存結構演算法

#include <stdio.h> #include <malloc.h> #define MAXV 100 /*最大頂點數設為100*/ #define LIMI

2017-2018-1 20155216 實驗外設驅動程序設計

加載 mar 結果 嵌入式 全屏 嵌入 image 開發 images 2017-2018-1 20155216 實驗四:外設驅動程序設計 實驗四外設驅動程序設計-1 實驗要求: 學習資源中全課中的“hqyj.嵌入式Linux應用程序開發標準教程.pdf”中的第十一章 提交

web API簡介()客戶端儲存之IndexedDB API

特性 通知 name com 模式 upgrade doesn 需要 code 概述 前篇:web API簡介(三):客戶端儲存之Web Storage API 客戶端儲存從某一方面來說和動態網站差不多。動態網站是用服務端來儲存數據,而客戶端儲存是用客戶端來儲存數據。 In

實驗SerU的搭建

SerU的搭建實驗目的:掌握SerU的搭建過程,通過SerU提供的ftp登錄方式來訪問,及實現上傳下載的功能實驗前準備:搭建IIS(過程省略)實驗過程:通過WMare提供的真實機與虛擬機的共享功能,把SerU 6.402和WinwebMail v3.7.11拷貝到虛擬機中請看如下的截圖及附帶的說明 雙擊Ser

實驗shell編程(2)

AR shift ber AC info 作用 name source 幫助信息 1. shell 變量基本用法及常用符號使用 此部分要求寫出實現相應要求的 shell 命令,截圖顯示 (1)將主提示符改為用戶的主目錄名 (2)將字符串 DOS file c:&

Spring 基礎教程之JavaBean基本配置詳解

一:xml 裝配JavaBean屬性含義: 1.id:指定該Bean 的唯一標識。 2.class:指定該Bean 的全限定名。 3.name:為該Bean 指定一到多個別名。多個別名可以用“,”和“;”分割。

SDN控制器之OVN實驗配置OVN負載均衡器

網路拓撲 基於我的上一篇文章,接下來我將介紹OVN的負載平衡特性。 但在開始之前,我們來看看上一個實驗中的配置。 實驗物理網路拓撲:   OVN 邏輯網路拓撲:   OVN 負載均衡器 OVN負載均衡器旨在為OVN邏輯網路空間內的工作負載提