<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

简介: 对于上一个迷宫的问题也可使用广度优先搜索(Breadth First Search,BFS),也称作宽度优先搜索。深度优先搜索的方法是一直搜索下去,直到走不通,再回到原地。
  • 对于上一个迷宫的问题也可使用广度优先搜索(Breadth First Search,BFS),也称作宽度优先搜索。
  • 深度优先搜索的方法是一直搜索下去,直到走不通,再回到原地。而广度优先搜索是是“一层一层”的扩展进行搜索。最开始假设还是(1,1)处,一步可以到达的点有(1,2)和(2,1)
  • 但是还没有找到目标,继续通过这两个(1,2)、(2,1)点往下走。之后,他能走到哪个点呢?(2,2),通过(2,1)还可以到(3,1),并且都是用2步,这里依然需要使用数组进行标记这个点是否走过。
  • 然后依次类推继续搜索;
  • 在上面的过程中,需要使用个结构体实现队列,
 struct note{
      int x;
      int y;
      int s;//记录步数 
}


- 从(1,1)开始,先尝试往右走到了(1,2),对其进行判断是否越界或为障碍物或已经走过(使用前边介绍的book数组标记)。

-从(1,1)也可以到达(2,1)。

- 出队时使用head++就可以啦!;

- 代码:

 #include<iostream>
using namespace std;
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
struct note{
    int x;
    int y;
    int f;
    int s;
};
int main(){
struct note que[2501];
    int head,tail;
     int sx,sy,tx,ty,q,p,m,n,flag;
    int a[51][51]={0};
    int book[51][51]={0};
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    cin>>sx>>sy>>p>>q;
    head=1;
    tail=1;
    que[tail].x=1;
    que[tail].y=1;
    que[tail].s=0;
    tail++;
    book[sx][sy]=1;
    flag=0;
    while(head<tail){
        for(int k=0;k<=3;k++){
            tx=que[head].x+next[k][0];
            ty=que[head].y+next[k][1];
            if(tx<1||ty<1||tx>n||ty>m)
                continue;
            if(a[tx][ty]==0&&book[tx][ty]==0){
                book[tx][ty]=1;
                que[tail].x=tx;
                que[tail].y=ty;
                que[tail].f=head;
                que[tail].s=que[head].s+1;
                tail++;
            }
            if(tx==p&&ty==q){
                flag=1;
                break;
            }
        }
        if(flag)
            break;
        head++;
    }
    cout<<que[tail-1].s<<endl;
    return 0;
}


  • 测试数据:

5  4
0   0    1   0
0   0    0   0
0   0    1   0 
0   1    0   0
0   0    0   1
1   1    4   3     
运行结果:

7

目录
相关文章
|
4月前
|
算法
【MATLAB】 SSA奇异谱分析信号分解算法
【MATLAB】 SSA奇异谱分析信号分解算法
71 0
|
存储 Web App开发 监控
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
我们以前使用过的对hbase和hdfs进行健康检查,及剩余hdfs容量告警,简单易用 1.针对hadoop2的脚本: #/bin/bashbin=`dirname $0`bin=`cd $bin;pwd`STATE_OK=...
1015 0
ActionScript3检测当前下载资源的速度
检测下载资源的平均速度,思路大致如下: 监听下载完成事件后,用总字节数/总时间,即可得到相应的下载速度 公式: speed = (byteTotal/1024)/(endTime-startTime),这个应该算是平均速度   监测下载的进度: 公式: procress = bytesLoaded/bytesTotal     在监听加载完成事件中,如果使用的是flash.
648 0
|
6天前
|
NoSQL Cloud Native Redis
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
阿里云瑶池数据库团队后续将持续参与Valkey社区,如过往在Redis社区一样耕耘,为开源社区作出持续贡献。
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
|
6天前
|
关系型数据库 分布式数据库 数据库
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
PolarDB分布式版助力《香肠派对》实现百亿好友关系20万QPS的毫秒级查询。
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
|
7天前
|
消息中间件 Cloud Native Serverless
RocketMQ 事件驱动:云时代的事件驱动有啥不同?
本文深入探讨了云时代 EDA 的新内涵及它在云时代再次流行的主要驱动力,包括技术驱动力和商业驱动力,随后重点介绍了 RocketMQ 5.0 推出的子产品 EventBridge,并通过几个云时代事件驱动的典型案例,进一步叙述了云时代事件驱动的常见场景和最佳实践。
115029 1
|
8天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101800 1
|
7天前
|
自然语言处理 Cloud Native Serverless
通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验
近日,通义灵码正式进驻函数计算 FC WebIDE,让使用函数计算产品的开发者在其熟悉的云端集成开发环境中,无需再次登录即可使用通义灵码的智能编程能力,实现开发效率与代码质量的双重提升。
95384 2
Doodle Jump — 使用Flutter&Flame开发游戏真不错!
用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...
112727 12
|
12天前
|
SQL 存储 JSON
Flink+Paimon+Hologres 构建实时湖仓数据分析
本文整理自阿里云高级专家喻良,在 Flink Forward Asia 2023 主会场的分享。
71311 1
Flink+Paimon+Hologres 构建实时湖仓数据分析