zoukankan      html  css  js  c++  java
  • 广度优先搜索法

    1.广度优先搜索法:就是通过指定一个节点,向四周节点搜索,搜索到的新节点判断是否出界,再次判断是否已经被访问,如未被标记也未出界,就将对应数组中的数字就输出,(ps:自我简单的了解)

    从队列头取出一个结点,检查它按照扩展规则是否能够扩展,如果能则产生一个新结点。 
    (2)检查新生成的结点,看它是否已在队列中存在,如果新结点已经在队列中出现过,就放弃这个结点,然后回到第(1)步。否则,如果新结点未曾在队列中出现过,则将它加入到队列尾。 
    (3)检查新结点是否目标结点。如果新结点是目标结点,则搜索成功,程序结束;若新结点不是目标结点,则回到第(1)步,再从队列头取出结点进行扩展......。 
    最终可能产生两种结果:找到目标结点,或扩展完所有结点而没有找到目标结点。 
    如果目标结点存在于解答树的有限层上,广度优先搜索算法一定能保证找到一条通向它的最佳路径,因此广度优先搜索算法特别适用于只需求出最优解的问题。当问题需要给出解的路径,则要保存每个结点的来源,也就是它是从哪一个节点扩展来的。 

    package com.qdcz.breadth.demo;

    import java.util.LinkedList;
    import java.util.Queue;

    /**
    *
    * <p>Title: BreadthA</p>
    * <p>Description:广度优先搜索算法 </p>
    * <p>Company:奇点创智 </p>
    * <p>Version: 1.0</p>
    * @author Administrator
    * @date 2017年6月5日 下午8:40:34
    */
    public class BreadthA {
    private int r=4;
    private int c=4;
    private int[][] graph={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
    private int[][]gr=new int[r][c];//标记。被访问标记为1,非1便没被标记
    int[][] rc={{0,1},{0,-1},{1,0},{-1,0}};//四个方向
    public static void main(String[] args) {
    new BreadthA().bFs();
    }
    class Node{
    int r;//行
    int c;//列
    int k;//第几波被访问的
    public Node(int r, int c, int k) {
    super();
    this.r = r;
    this.c = c;
    this.k = k;
    }
    }

    public void bFs(){
    Node done=new Node(0, 0, 0);//初始化。从0,0开始
    gr[0][0]=1;//0,0默认被访问
    Queue<Node> qu=new LinkedList<>();
    qu.offer(done);//将初始化的node传入队列
    while(!qu.isEmpty()){
    Node node = qu.poll();//获取并移除队列头
    for (int i = 0; i <4; i++) {//循环四次,分别是四个方向
    //形成新的行列
    int newr=node.r+rc[i][0];
    int newc=node.c+rc[i][1];
    //如果新的行和列超出范围就跳过这次循环
    if(newr<0||newc<0||newr>=r||newc>=c) continue;
    //如果新的节点已被访问也跳过此次循环
    if(gr[newr][newc]!=0)continue;
    //标记当前的节点已被访问
    gr[newr][newc]=1;
    //加入队列
    qu.offer(new Node(newr, newc, node.k+1));
    System.out.println(graph[newr][newc]+" "+(node.k+1));
    }
    }
    }
    }

  • 相关阅读:
    梯度下降
    最小二乘法模型的推导原理
    斗图啦+多线程(队列)
    scrapy错误-[scrapy.core.scraper] ERROR: Spider error processing
    python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool
    AttributeError: module 'requests' has no attribute 'get'的错误疑惑
    *arg,**kwargs的参数作用的疑惑
    scrapy框架--新建调试的main.py文件
    Scrapy框架——安装以及新建scrapy文件
    爬虫-ajax请求遇到Unicode编码问题
  • 原文地址:https://www.cnblogs.com/1x-zfd50/p/6958299.html
Copyright © 2011-2022 走看看