各种DFS

作者: 余生筑 | 来源:发表于2019-03-17 19:35 被阅读0次
    • DFS邻接矩阵遍历图
    void DFS(int i)
    {
        vest[i]=true;
        for(int j=0; j<N; j++)
        {
            if(vest[j]==false&&G[i][j]!=INF)
                DFS(j);
        }
    }
    
    • DFS邻接表遍历图
    void DFS(int i)
    {
        vest[i]=true;
        for(int j=0; j<Adj[i].size(); i++)
        {
            if(vest[Adj[i][j]]==false)
                DFS(Adj[i][j]);
        }
    }
    
    • DFS回溯(不走重复路径)
    void DFS(int x)
    {
        if(x==5)
        {
            int sum=a[0]-a[1]*a[1]+a[2]*a[2]*a[2]-a[3]*a[3]*a[3]*a[3]+a[4]*a[4]*a[4]*a[4]*a[4];
            if(sum==n)
                cnt++;
            return;
        }
        for(int i=0;i<len;i++)
        {
            if(vest[i]==false)
            {
                a[x]=s[i]-'A'+1;
                vest[i]=true;
                dfs(x+1);
                vest[i]=false;
            }
        }
        return;
    }
    
    • DFS背包(可重复选)
    void DFS(int index,int use,int sum,int x)
    {
        if(index==26)
        {
            if(sum<=50&&sum>0)
                 cnt++;
            return;
        }
        if(use<num[index]&&sum+index+1<=50)
        {
            temp[x]=index+1;
            DFS(index,use+1,sum+index+1,x+1);
        }
        DFS(index+1,0,sum,x);
    }
    
    • DFS背包(不可重复选)
    void DFS(int index,int x,int sum)
    {
        if(index==pNum)
            return;
        if(x==2)
        {
            if(sum==N)
                cnt++;
            return;
        }
        if(sum+prime[index]<=N)
            DFS(index+1,x+1,sum+prime[index]);
        DFS(index+1,x,sum);
    

    相关文章

      网友评论

          本文标题:各种DFS

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