DFS(深度优先搜索)

回溯

#include<iostream>

using namespace std;

const int N = 10;

int path[N];
bool st[N];
int n;

void dfs(int u)
{
    if(n==u)
    {
        for(int i=0;i<n;i++) printf("%d ",path[i]);
        puts("");
        return;
        
    }
    
    for(int i=1;i<=n;i++)
    {
        if(!st[i])
        {
            path[u]=i;
            st[i]=true;
            dfs(u+1);
            st[i]=false;
            
        }
        
    }
    
}
int main()
{
  cin>>n;
   
   dfs(0);
   
   return 0;
}

深度优先搜索(Depth First Search,DFS)是一种经典的图遍历算法,在计算机科学中具有广泛的应用[^3]。 ### 介绍 深度优先搜索DFS)是一种基础且强大的搜索算法,是用于遍历或搜索树或图的算法[^2]。 ### 原理 该算法沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。 ### 应用 DFS在多个领域发挥着重要作用,广泛应用于路径搜索、连通性判断、迷宫求解等领域。在解决路径查找、组合问题,以及处理图的连通性判断、拓扑排序等复杂任务中,DFS都是不可或缺的工具[^2][^3]。 ### 实现方法 以 Java 为例实现深度优先搜索遍历图,以下是示例代码: ```java import java.util.*; class Graph { private int V; private LinkedList<Integer> adj[]; Graph(int v) { V = v; adj = new LinkedList[v]; for (int i = 0; i < v; ++i) adj[i] = new LinkedList(); } void addEdge(int v, int w) { adj[v].add(w); } void DFSUtil(int v, boolean visited[]) { visited[v] = true; System.out.print(v + " "); Iterator<Integer> i = adj[v].listIterator(); while (i.hasNext()) { int n = i.next(); if (!visited[n]) DFSUtil(n, visited); } } void DFS(int v) { boolean visited[] = new boolean[V]; DFSUtil(v, visited); } public static void main(String args[]) { Graph g = new Graph(4); g.addEdge(0, 1); g.addEdge(0, 2); g.addEdge(1, 2); g.addEdge(2, 0); g.addEdge(2, 3); g.addEdge(3, 3); System.out.println("Following is Depth First Traversal " + "(starting from vertex 2)"); g.DFS(2); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值