深度优先搜索和广度优先搜索

本文介绍了两种基本的图搜索算法——深度优先搜索(DFS)和广度优先搜索(BFS)。DFS如同走迷宫,适用于数据量不大且不追求最优解的情况;而BFS采用层层推进的方式,常用于社交网络中找寻多度关系。文章通过代码解释了邻接表存储的图及BFS、DFS的实现,强调了visited、queue和prev变量的重要性。
摘要由CSDN通过智能技术生成

搜索算法

算法是作用于具体的数据结构之上的,深度优先搜索和广度优先搜索都是基于图这种数据结构的。他们是两种最简单、最暴力的搜索。

1.广度优先搜索(Breadth- First-Search)

广度优先搜索(Breadth- First-Search),地毯式 层层推进的搜索策略,即现查找离起始点最近的,然后是次近的,一次往外搜索。

六度分割理论

并不是说任何人与人之间的联系必须要通过六个层析才会产生联系,而是表达了这样一个重要的概念,任何素不相识的人之间,通过一定的联系方式,总能产生必然联系或者关系。

图这种数据结构一般都会用在社交网络中,二根据六度分割理论,可以抽像为,你好友的好友的好友的好友的好友的好友有谁,社交网络中的通常通过好友的好友的关系来给你推荐”可能认识的人“这个功能。。给你一个用户如何找到你好友的好友(三度)有谁?这种算法其实就是广度优先搜索


图的存储方式主要有邻接矩阵邻接表两种存储方式。如果有不明白的可以先看下这篇文章

今天的代码实现都是基于邻接表存储的图。

先看下代码实现:

1.先实现一个邻接表存储的图。

/**
 * 这是一个无向图
 */
public class Graph {
   

    private int v;//顶点的个数

    private LinkedList<Integer> adj[];//邻接表

    public Graph(int v){
   
        this.v=v;
        adj = new LinkedList[v];
        for(int i=0;i<v;i++){
   
            adj[i]=new LinkedList<>();
        }
    }

    public void addEdge(int s ,int t){
   
        adj[s].add(t);
        adj[t]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值