美文网首页
DFS求两点间所有路径

DFS求两点间所有路径

作者: 余生筑 | 来源:发表于2019-03-16 10:32 被阅读0次
    #include<iostream>
    #include<vector>
    #include<cstring>
    #include<algorithm>
    #include<numeric>
    #include<stack>
    using namespace std;
    const int MAXV=1001,INF=1000001;
    int N,M,st,ed,cnt=0;
    bool vest[MAXV];//若vest[i]已并入树中,则vest[i]=true;
    int G[MAXV][MAXV];//图的边权值
    int nex[MAXV];
    
    void DFS(int i)
    {
        vest[i]=true;
        if(i==ed)
        {
            cnt++;
            cout<<"第"<<cnt<<"条路径如下"<<endl;
            int k=st;
            while(k!=ed)
            {
                cout<<k+1<<"->";
                k=nex[k];
            }
            cout<<k+1<<endl;
            return;
        }
    
        for(int j=0; j<N; j++)
        {
            if(vest[j]==false&&G[i][j]!=INF)
            {
                nex[i]=j;//对于路径0->1->3: nex[0]=1;nex[1]=3;
                DFS(j);
                vest[j]=false;
            }
        }
    }
    int main()
    {
        cin>>N>>M;//顶点数与边数
        fill(G[0],G[0]+MAXV*MAXV,INF);
        fill(vest,vest+MAXV,false);
        for(int i=0; i<M; i++)
        {
            int a,b;
            cin>>a>>b;
            G[a-1][b-1]=1;
            G[b-1][a-1]=1;
        }
        int u,v;
        cin>>u>>v;//起点与终点
        st=u-1;
        ed=v-1;
        DFS(st);
    }
    /*
    输入:
    5 7
    1 2
    1 3
    1 4
    1 5
    2 4
    3 5
    3 4
    1 4
    
    输出:
    第1条路径如下
    1->2->4
    第2条路径如下
    1->3->4
    第3条路径如下
    1->4
    第4条路径如下
    1->5->3->4
    */
    

    相关文章

      网友评论

          本文标题:DFS求两点间所有路径

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