算法学习:图的深度优先遍历(DFS)

图的深度优先遍历

采用邻接矩阵表示图的方法,递归实现。
栈的使用:

头文件:<stack>
s.empty():栈空则返回true,否则返回false
s.top():返回栈顶元素,不删除该元素
s.push():压栈
s.pop():删除栈顶元素,无返回值

使用栈的时候参考了以下文章:
http://blog.csdn.net/zhy_cheng/article/details/8090346
下面是代码:

#include<iostream>
#include<stack>
#define M 11
using namespace std;
int graph[M][M] =   
{ 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0,   
0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0,   
0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0,   
0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0,   
0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0,   
0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0,   
0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1,   
0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1,   
0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,   
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0  
};

int visited[M];

//总共有m个点,从第i个点开始遍历 
void dfs(int k, int m)
{
    stack <int> s;
    s.push(k);
    visited[k] = 1;
    while(!s.empty())
    {
        int top = s.top();
        cout << top << endl;
        s.pop();
        for(int i = 1;i <= m; i++)
        {
            if(visited[i]==0 && graph[top][i])
            {
                dfs(i,m);
            }
        }
    }
}

int main()
{
    dfs(1,10); 
    return 0;
}
    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/zkyrjsxdm/article/details/50281867
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞