BFS迷宫问题模型(具体模拟过程见《啊哈算法》)

题目描述与DFS模型走迷宫那篇一样。小哈被困在迷宫里,小哼解救小哈。

这里用BFS来写。BFS(广搜)与DFS(深搜)的区别就在于,DFS是“不撞南墙不回头”,一条路走到不能再走之后才会回到起始点,另开辟一条新的道路;而BFS是将道路层层扩展,走到一个点时会同时搜索附近能到达的点,同时进行。

这里先附上我最开始的代码(但编译出来是错的):

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<math.h>
#include<set>
#include<map>
using namespace std;
struct node
{
    int x,y,s;
};
int main()
{
    struct node q[5000];
    int a[1005][1005]={0},book[1005][1005]={0};
    int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
    int i,j,n,m,p,q1,tx,ty,flag=0;
    int head,tail;  //队列
    scanf("%d%d",&n,&m);
    scanf("%d%d",&p,&q1);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    head=1;
    tail=1;
    q[head].x=1;
    q[head].y=1;
    q[head].s=0;
    tail++;
    book[1][1]=1;
    while(head<tail)
    {
        for(i=1;i<=3;i++)
        {
            tx=q[head].x+dir[i][0];
            ty=q[head].y+dir[i][1];
            if(tx>n||tx<1||ty>m||ty<1)
                continue;
            if(a[tx][ty]==0&&book[tx][ty]==0)
            {
                book[tx][ty]=1;
                q[tail].x=tx;
                q[tail].y=ty;
                q[tail].s=q[head].s+1;
                tail++;
            }
            if(tx==p&&ty==q1)
            {
                flag=1;
                break;
            }
        }
        if(flag==1)
            break;
        else
            head++;
    }
    printf("%d\n",q[head-1].s);  //这个时候tail指向队列的末尾
    return 0;
}

一开始是不能输出,把最开始的那些变量定义在主函数前竟然就可以进行输入了(我也不知道为啥)。然后可以输入之后,我尝试了这组数据,但输出是0,还是错的:

问了同学,她把我的输入输出格式给改了(cin  cout,但是我觉得这没什么影响呀);还有走四个方向的那个for循环,我 i  一开始从1开始,这样就只进行了三个方向的搜索,应该从i=0开始;最后是输出q[head].s,而不是head-1;最后正确代码如下:

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<math.h>
#include<set>
#include<map>
using namespace std;
struct node
{
    int x,y,s;
} ;
struct node q[5000];
int a[1005][1005]= {0};
int book[1005][1005]= {0}, dir[4][2]= {{0,1},{1,0},{0,-1},{-1,0}};
int main()
{
    int i,j,n,m,p,q1,tx,ty,flag=0;
    int head,tail;  //队列
    cin>>n>>m;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    cin>>p>>q1;
    head=1;
    tail=1;
    q[head].x=1;
    q[head].y=1;
    q[head].s=0;
    tail++;
    book[1][1]=1;
    while(head<tail)
    {
        for(i=0; i<=3; i++)
        {
            tx=q[head].x+dir[i][0];
            ty=q[head].y+dir[i][1];
            if(tx>n||tx<1||ty>m||ty<1)
                continue;
            if(a[tx][ty]==0&&book[tx][ty]==0)
            {
                book[tx][ty]=1;
                q[tail].x=tx;
                q[tail].y=ty;
                q[tail].s=q[head].s+1;
                tail++;
            }
            if(tx==p&&ty==q1)
            {
                flag=1;
                break;
            }
        }
        if(flag==1)
            break;
        else
            head++;
    }
    printf("%d\n",q[head].s+1);  //这个时候tail指向队列的末尾
    return 0;
}

 

转载于:https://www.cnblogs.com/programming123/p/10833757.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Batch可重启性

首先&#xff0c;我要非常感谢Spring的优秀人员&#xff0c;他们花了无数时间来确保Spring Batch作业的可行性&#xff0c;以及发出重新启动作业的神奇能力&#xff01; 感谢您提供的这个优雅的工具集&#xff0c;它使我们能够浏览大量数据集&#xff0c;同时使我们在跌倒时能够…

tf.clip_by_value()

tf.clip_by_value(A, min, max) 输入一个张量A&#xff0c;把A中的每一个元素的值都压缩在min和max之间。 小于min的让它等于min&#xff0c;大于max的元素的值等于max。

python如何导入seaborn_Seaborn - 导入数据集和库

教 程 目 录 在本章中&#xff0c;我们将讨论如何导入数据集和库.让我们首先了解如何导入库. 导入库 让我们从导入Pandas开始&#xff0c;这是一个管理关系的好库(表格式)数据集. Seaborn在处理DataFrames时非常方便&#xff0c;DataFrames是用于数据分析的最广泛使用的数据结构…

Windows安装Redis(转!)

转自https://www.cnblogs.com/wxjnew/p/9160855.html “现在我已经走到了人生的十字路口边了&#xff0c;我相信&#xff0c;在已走过的人生道路中&#xff0c;我一直知道其中哪一条是正确的&#xff0c;是的&#xff0c;我一直坚信我知道。但是我却从未选择那些正确的道路&…

弃用Java的终结器

JDK-8165641 &#xff08;“ Deprecate Object.finalize”&#xff09;已打开以“ deprecate Object.finalize&#xff08;&#xff09; ”&#xff0c;因为“ finalizer本质上存在问题&#xff0c;使用finalizer可能会导致性能问题&#xff0c;死锁&#xff0c;挂起和其他问题…

python安装mysqlclient_Python-安装mysqlclient(MySQLdb)

mysqlclient&#xff08;也就是Python3版本的MySQLdb&#xff09;&#xff0c;性能比pymysql好&#xff0c;速度更快及PyMySQL的应用场景&#xff1b;所以一般大项目建议使用MySQLdb 使用pip安装 pip install mysqlclient 安装过程中可能会出现如下问题&#xff1a;解决方法如下…

tesorflow 填充‘same’与‘valid’

源码&#xff1a; #codingutf-8import tensorflow as tf# case 2 input tf.Variable(tf.random_normal([1, 256, 256, 3]))op1 tf.layers.conv2d(inputsinput, filters164, kernel_size(7, 7), strides(2, 2), padding"same", activationtf.nn.relu)op2 tf.layer…

hadoop中两种上传文件方式

记录如何将本地文件上传至HDFS中 前提是已经启动了hadoop成功&#xff08;nodedate都成功启动&#xff09; ①先切换到HDFS用户 ②创建一个user件夹 bin/hdfs dfs -mkdir /user &#xff08;hadoop目录下&#xff09; 多级创建的时候 hdfs dfs -mkdir -p /wifi/classify 查看创…

c语言科学计数法_C入门:C语言中数据的储存(上)

How Data is stored in computer memory?储存数据是计算机进行各种数据操作的基础&#xff0c;为了理解计算机可以对哪些数据进行怎样的操作&#xff0c;有必要了解数据在计算机中的储存方式。为了有效防止失真&#xff0c;提高数据的准确性和稳定性&#xff0c;计算机使用二进…

tf.layers.dense

tf.layers.dense( inputs, units, activationNone, use_biasTrue, kernel_initializerNone, bias_initializertf.zeros_initializer(), kernel_regularizerNone, bias_regularizerNone,activity_regularizerNone, trainableTrue, nameNone, reuseNone ) 各参数含义&#xff1a;…

java 修改 枚举类字段_枚举枚举和修改“最终静态”字段的方法

java 修改 枚举类字段在本新闻通讯中&#xff0c;该新闻通讯最初发表在Java专家的新闻通讯第161期中&#xff0c;我们研究了如何使用sun.reflect包中的反射类在Sun JDK中创建枚举实例。 显然&#xff0c;这仅适用于Sun的JDK。 如果需要在另一个JVM上执行此操作&#xff0c;则您…

tf.reduce_mean

tf.reduce_mean(input_tensor, axisNone, keep_dimsFalse, nameNone, reduction_indicesNone) 作用&#xff1a;沿着张量不同的数轴进行计算平均值。 参数&#xff1a;input_tensor: 被计算的张量&#xff0c;确保为数字类型。 axis: 方向数轴&#xff0c;如果没有…

display函数怎么使用_使用网络构建复杂布局超实用的技巧,赶紧收藏吧

前端开发工程师必读书籍有哪些值得推荐&#xff1f;我们直接进入代码&#xff0c;如下所示&#xff0c;先写些标签&#xff0c;源码在这个链接里面&#xff1a;https://codepen.io/Shadid/pen/zYqNvgvHeader Aside 1 Section Aside 2 Footer在上面&#xff0c;我们创建了一…

安装后jdk1.8 配置环境变量以后 版本显示还是1.7

配置图如下 1.7版本不用卸载 不用就可以了 转载于:https://www.cnblogs.com/roujiamo/p/10836593.html

为@Cacheable设置TTL – Spring

今天&#xff0c;我被要求为应用程序正在使用的某些键设置缓存的过期时间&#xff0c;因此我Swift开始寻找Spring Cacheable表示法提供的所有选项&#xff0c;以设置过期时间或生存时间。 由于Spring没有提供任何可配置的选项来实现它&#xff0c;因此&#xff0c;我利用固定延…

tf.equal

tf.equal(A, B)是对比这两个矩阵或者向量的相等的元素&#xff0c;如果是相等的那就返回True&#xff0c;反正返回False&#xff0c;返回的值的矩阵维度和A是一样的 import tensorflow as tf import numpy as np A [[1,3,4,5,6]] B [[1,3,4,3,2]] with tf.Session() a…

校验输入框的内容不能重复_答应我,用了这个jupyter插件,别再重复造轮子了

以下文章来源于Python大数据分析 &#xff0c;作者费弗里1 简介在使用Python、R等完成日常任务的过程中&#xff0c;可能会经常书写同样或模式相近的同一段代码&#xff0c;譬如每次使用matplotlib绘制图像的时候可以在开头添加下面两行代码来解决中文乱码等显示问题&#xff1…

P2387 [NOI2014]魔法森林

和最小差值生成树差不多 都是用lct维护生成树的题目 本题可以以a排序&#xff0c;再维护b&#xff08;通常这种二维变量的题都差不多这样&#xff0c;先排序一维&#xff09; 然后我tm竟然rotate手误打错了一点...调了好久.. 然后关于pushup&#xff1a;关于最大值&#xff0c;…

C# float/double 减 float/double 等 (X.xxxxxxxxxxxxxE-07)(黑盒测试)

问题 因为没有深究原理&#xff0c;所有只进行了“黑盒测试” 黑盒测试结论&#xff1a; 问题操作结论float/double运算进过一系列的运算后大概率 &#xff01; 0.0 &#xff0c; 而是等于0.00000000000xxxx等于X.xxxxxxxx一串数字的时候不影响下一步继续使用当需要显示fl…

ABP的新旧版本

新版本 https://abp.io/documents/abp/latest/Index https://github.com/abpframework/abp ABP is an open source application framework focused on ASP.NET Core based web application development, but also supports developing other types of applications. 旧版本…