美文网首页
图遍历---深度优先搜索DFS

图遍历---深度优先搜索DFS

作者: 羊老头 | 来源:发表于2018-11-26 22:32 被阅读0次
#include<iostream>
using namespace std;
 
const int MaxLen = 20;  //设定图最多包含20个顶点 
 
class Map{
private:
    bool Visit[MaxLen];     //访问标志数组,标识每个顶点是否已访问
    int Matrix[MaxLen][MaxLen];//图的邻接矩阵
    int Vexnum;             //图的顶点数量
    void DFS(int v);        //深度优先,私有函数,内部调用 
public:
    void SetMatrix(int vnum,int **mx);
    void DFSTraverse();     //共有函数,被main调用 
};
 
//设置邻接矩阵
void Map::SetMatrix(int vnum,int **mx){
    int i,j;
    Vexnum = vnum;
    for(i=0; i<vnum; i++)
        for(j=0; j<vnum; j++)
            Matrix[i][j] = mx[i][j];
} 
 
void Map::DFSTraverse(){
//对图G做深度优先遍历,共有函数 
    int v;
//代码2行,把访问标志数组的值全部设为false
    for(v=0; v<Vexnum; v++)  
        Visit[v] = false;
//代码2-3行,从v=0开始,对所有顶点进行检查
    //如果该顶点未访问,则调用DFS函数进行深度优先搜索
    for(v=0; v<Vexnum; v++)
        if(!Visit[v])   DFS(v);
    cout<<endl;   
}
 
//深度优先搜索
void Map::DFS(int v){
    int w, i, k;
    //2行代码,先对顶点v进行访问,执行操作包括:
        //1.设置visit数组的第v个位置为true,标识已访问
        //2.输出数值v再输出一个空格,标识当前顶点已访问,并用空格隔开
    Visit[v] = true;
    cout << v << " ";   
    //访问与v连接且没有访问过的结点 
    for( i=0; i<Vexnum; i++ ){
        if( Matrix[v][i]==1 && !Visit[i] )
            DFS(i);
    }
} 
 
int main()
{
    int t,i,j;
    int n;
    int **Matrix;
    cin >>t;
    while(t--){
        cin >> n;
        Matrix = new int*[n];
        for(i=0;i<n;i++)
            Matrix[i] = new int[n];
        for(i=0; i<n; i++)
            for(j=0; j<n; j++)
                cin >> Matrix[i][j];
     
        Map m;
        m.SetMatrix(n,Matrix);
        m.DFSTraverse();
     
        for(i=0; i<n; i++)
            delete []Matrix[i];
        delete []Matrix;
    }
}

相关文章

  • 数据结构之图的遍历-深度优先搜索(DFS)和广度优先搜索(BFS

    两种遍历 图的遍历分为深度优先搜索(Depth First Search)和广度优先搜索 深度优先搜索(DFS) ...

  • DFS与N皇后问题

    DFS与N皇后问题 DFS 什么是DFS DFS是指深度优先遍历也叫深度优先搜索。 它是一种用来遍历或搜索树和图数...

  • 2. 图的遍历算法

    图的遍历算法包括: 1. 深度优先搜索. 2. 广度优先搜索 1. 深度优先搜索 DFS (Depth Firs...

  • 图的遍历

    1.采用深度优先搜索(DFS)遍历图 邻接矩阵: 邻接表: 2.采用广度优先搜索(BFS)遍历图 邻接矩阵: 邻接...

  • 图-深度优先搜索与广度优先搜索

    深度优先搜索(Depth First Search, DFS) 深度优先遍历图的方法是,从图中某顶点v出发:(1)...

  • 图的深度优先遍历和广度优先遍历

    图的遍历主要有深度优先搜索 DFS(depth-first search) 和广度优先搜索BFS( breadth...

  • 刷题7 剑指 Offer — DFS

    树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);常见的 DFS : 先序遍历、中序遍历、...

  • DFS(栈)&BFS(队列)

    前言 对树(tree)或者图(graph)而言,深度优先搜索(DFS) 和广度优先搜索(BFS)都是用于遍历或者搜...

  • 无向图DFS和BFS

    基本结构 DFS深度优先遍历 BFS广度优先遍历 符号图

  • 数据结构-图

    图的增删改查 增 邻接表 邻接矩阵 删 改 查 图的遍历 深度优先遍历(DFS) 深度优先搜索法是树的先根遍历的推...

网友评论

      本文标题:图遍历---深度优先搜索DFS

      本文链接:https://www.haomeiwen.com/subject/bhgiqqtx.html