java dfs算法怎么实现

深度优先搜索(DFS)是一种用于遍历或搜索树或图的算法,其基本思想是从起始节点开始,沿着一条路径尽可能深地搜索,直到到达叶子节点或者无法继续搜索为止,然后回溯到上一个节点,选择另一条路径继续搜索。以下是一个简单的Java实现DFS算法的例子:import java.util.List;import java.util.Stack;public class DFS {public void df

深度优先搜索(DFS)是一种用于遍历或搜索树或图的算法,其基本思想是从起始节点开始,沿着一条路径尽可能深地搜索,直到到达叶子节点或者无法继续搜索为止,然后回溯到上一个节点,选择另一条路径继续搜索。以下是一个简单的Java实现DFS算法的例子:

import java.util.List;
import java.util.Stack;

public class DFS {

    public void dfs(List<List<Integer>> graph, int start) {
        boolean[] visited = new boolean[graph.size()];
        Stack<Integer> stack = new Stack<>();
        stack.push(start);

        while (!stack.isEmpty()) {
            int node = stack.pop();
            if (!visited[node]) {
                System.out.print(node + " ");
                visited[node] = true;
                for (int neighbor : graph.get(node)) {
                    if (!visited[neighbor]) {
                        stack.push(neighbor);
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        List<List<Integer>> graph = List.of(
                List.of(1, 2),
                List.of(0, 2, 3),
                List.of(0, 1, 4),
                List.of(1),
                List.of(2)
        );

        DFS dfs = new DFS();
        dfs.dfs(graph, 0);
    }
}

在上面的例子中,我们首先创建了一个boolean数组用于记录节点是否被访问过,然后创建一个栈用于存储待访问的节点。在DFS方法中,从起始节点开始,不断地遍历邻居节点,并将未访问过的邻居节点加入栈中。当栈为空时,表示搜索完成。在main方法中,我们定义了一个简单的图,并调用dfs方法从节点0开始进行深度优先搜索。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1046019.html

(0)
派派
上一篇 2024-05-25
下一篇 2024-05-25

相关推荐

  • 怎么使用Mahout进行网格搜索

    使用Mahout进行网格搜索可以通过以下步骤实现:导入Mahout库和必要的依赖项。import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;import org.apache.mahout.cf.taste.impl.recommender.svd.*;import org.apache.mahout.cf.taste.m

    2024-05-22
    0
  • sql字段拼接查询的方法是什么

    在 SQL 中,可以使用 CONCAT 函数来拼接字段查询。例如,假设有两个字段 first_name 和 last_name,要将它们拼接为一个名字字段,可以使用以下 SQL 查询语句:SELECT CONCAT(first_name, ' ', last_name) AS full_nameFROM table_name;这样就可以将 first_name 和 last

    2024-03-04
    0
  • potplayer如何固定窗口大小

    有很多用户会遇到在观看视频的时候,屏幕的大小总是会变来变去,会让用户的体验感变差,只需要在播放页面中右键打开设置进行更改就可以了。potplayer如何固定窗口大小:方法一: 1、首先在播放界面右击打开菜单,选择“播放”。2、然后点击“播放设置”。3、选择合适的窗口尺寸保存,这样以后的视频就会固定在这个尺寸。方法二: 1、首先右击播放界面,打开菜单选择“选项”。2、然后进入“参数选项”界面,点击“

    2024-01-23 技术经验
    0
  • 如何制作wap网站(手机怎么制作网站教程步骤)

    如何制作wap网站,手机怎么制作网站教程步骤内容导航:怎么制作网站的手机版wap网站怎样制作制作手机网站m开头和wap开头的区别是什么什么是wap网站wap网站有什么功能呢一、怎么制作网站的手机版做手机网站的方法一下几种1、模板站,下载手机网站模板,然后将内容和PC站点通用,这样移动设备访问网站时就会自动转入到手机站的模板。你也可以解析一个m开头的域名作为手机站的域名,有利于搜索引擎抓取。2、自适

    2022-04-19
    0
  • mongodb去重查询的方法是什么

    在MongoDB中,可以通过使用distinct()方法来进行去重查询。这个方法接受一个字段作为参数,返回该字段的所有唯一值。例如,下面的示例代码可以查询集合中某个字段的所有唯一值:db.collection.distinct(“field_name”)其中,collection是集合的名称,field_name是要进行去重查询的字段。这个方法将返回field_name字段的所有唯一值。

    2024-05-08
    0
  • Java中thread.sleep的优缺点是什么

    优点:可以让线程休眠一段时间,适用于一些需要等待的操作,比如等待网络请求返回、等待资源加载等。可以控制线程执行速度,避免一些资源竞争问题。缺点:使用sleep方法会让线程进入阻塞状态,占用系统资源,影响系统的性能。可能会导致线程的调度不准确,出现一些时间上的不确定性。不推荐在生产环境中使用sleep方法来控制线程的执行,应该使用更加精确的方式,比如使用线程池、定时器等。

    2024-02-22
    0

发表回复

登录后才能评论