<!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

  • 目录
    相关文章
    |
    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
    可伸缩系统的架构经验 Feb 27th, 2013 | Comments 最近,阅读了Will Larson的文章Introduction to Architecting System for Scale,感觉很有价值。
    2456 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
    基于大数据的精准营销与应用场景 2015年08月11日 大数据 大数据营销时代来临营销学领域过去半个多世纪的发展让我们见证了从“以产品为中心”到“以客户为中心”的转变。
    1055 0
    |
    SQL 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
         如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。
    876 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
    CentOS 6.5安装配置ldap 时间:2015-07-14 00:54来源:blog.51cto.com 作者:“ly36843运维” 博客 举报 点击:274次 一.
    1009 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
    一、概述   多维数据模型是最流行的数据仓库的数据模型,多维数据模型最典型的数据模式包括星型模式、雪花模式和事实星座模式,本文以实例方式展示三者的模式和区别。
    853 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
    一个典型的星型模式包括一个大型的事实表和一组逻辑上围绕这个事实表的维度表。  事实表是星型模型的核心,事实表由主键和度量数据两部分组成。
    618 0
    |
    Web App开发 前端开发 Java
    <!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
    Runnable:一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,例如有可能在对某个文件操作,有可能进行数据类型等转换。
    706 0
    |
    Web App开发 Java
    <!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
                                                                                    序列化对单例的破坏 本文将通过实例+阅读Java源码的方式介绍序列化是如何破坏单例模式的,以及如何避免序列化对单例的破坏。
    1013 0