深搜的非递归写法

本文介绍了一种使用C++实现的图遍历算法,包括深度优先搜索(DFS)的两种不同实现方式:递归和非递归。通过建立图结构并添加边来构造图,然后利用DFS遍历整个图,并打印出遍历过程中的节点。
#include"stdio.h"
#include"string.h"
#include"queue"
#include"stack"
#include"iostream"
#include"string"
#include"map"
#include"stdlib.h"
#define inf 99999999
#define M 1000009
using namespace std;
struct st
{
    int u,v,w,next;
}edge[M];
int t,head[M],use[M],s[M],cnt,Stack[M],top,num;
struct node
{
    int u,id;
}p[M];
void init()
{
    t=0;
    memset(head,-1,sizeof(head));
}
void add(int u,int v)
{
    edge[t].u=u;
    edge[t].v=v;
    edge[t].next=head[u];
    head[u]=t++;
}
/*void DFS(int u)
{
    use[u]=1;
    printf("%d ",u);
    for(int i=head[u];i!=-1;i=edge[i].next)
    {
        int v=edge[i].v;
        if(!use[v])
            DFS(v);
    }
}*/
void DFS(int u)
{
    int i;
    top=0;
    memset(use,0,sizeof(use));
    Stack[++top]=u;
    use[u]=1;
    while(top)
    {
        int u=Stack[top];
        for(i=head[u];i!=-1;i=edge[i].next)
        {
            int v=edge[i].v;
            if(!use[v])
            {
                use[v]=1;
                Stack[++top]=v;
                break;
            }
        }
        if(i==-1)
        {
            printf("%d ",Stack[top]);
            top--;
        }


    }
}
void dfs(int u)
{
    use[u]=1;
    for(int i=head[u];i!=-1;i=edge[i].next)
    {
        int v=edge[i].v;
        if(!use[v])
        {
            dfs(v);


        }
    }
    printf("%d ",u);
}
int main()
{
    int n,m,i;
    while(scanf("%d%d",&n,&m)!=-1)
    {
        init();
        while(m--)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            add(a,b);
            add(b,a);
        }
        DFS(1);
        printf("\n");
        memset(use,0,sizeof(use));
        dfs(1);
        printf("\n");
    }
}

转载于:https://www.cnblogs.com/mypsq/p/4348212.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值