什么是BFS传送门。

今天学习BFS,加油!

先定义个数组:

struct Node{
int a=0;
int b=0;
int step=0;
};
int map[5][4]={//地图
0,0,3,2,//2是终点 3是山,不能走
0,0,0,0,//求从(0,0)出发到2位置的最短路径
0,0,3,0,
0,3,0,0,
0,0,0,3,
}; Node queue[25];  //队列

BFS关键的是队列。

下面写个函数用于入队操作:

int rudui(int a,int b)//入队
{
if(a>=5 || a<0 || b>=4 || b<0 )
{
return 0;
}
//边界控制
if(book[a][b]==0 && map[a][b]!=3)//可以入队
{
queue[tail].a=a;
queue[tail].b=b;
queue[tail].step=queue[head].step+1; book[a][b]=1;//标记下 不能走了
tail++;
} if(map[a][b]==2)
{
return 1;
} return 0;
}

有了以上工具,我们开始工作:

int main()
{
while(head<tail)
{
if( rudui(queue[head].a+1,queue[head].b) || //走上
rudui(queue[head].a,queue[head].b+1) || //走右
rudui(queue[head].a-1,queue[head].b) || //走下
rudui(queue[head].a,queue[head].b-1) ) //走左
{
cout<<"findOK"<<" "<<queue[tail-1].step; //输出路径
return 0;
}
else{
head++; }
} return 0;
}

  OK了。

下面给出完整代码:

#include<iostream>
//#include<queue>
#include<math.h>
using namespace std;
struct Node{
int a=0;
int b=0;
int step=0;
};
int map[5][4]={
0,0,3,2,
0,0,0,0,
0,0,3,0,
0,3,0,0,
0,0,0,3,
}; int book[5][4]={0}; Node queue[25]; int head=0,tail=1;
int rudui(int a,int b)//入队
{
if(a>=5 || a<0 || b>=4 || b<0 )
{
return 0;
}
//边界控制
if(book[a][b]==0 && map[a][b]!=3)//可以入队
{
queue[tail].a=a;
queue[tail].b=b;
queue[tail].step=queue[head].step+1; book[a][b]=1;//标记下 不能走了
tail++;
} if(map[a][b]==2)
{
return 1;
} return 0;
} int main()
{
while(head<tail)
{
if( rudui(queue[head].a+1,queue[head].b) || //走上
rudui(queue[head].a,queue[head].b+1) || //走右
rudui(queue[head].a-1,queue[head].b) || //走下
rudui(queue[head].a,queue[head].b-1) ) //走左
{
cout<<"findOK"<<" "<<queue[tail-1].step; //输出路径
return 0;
}
else{
head++; }
} return 0;
}

  

2015-03-24 15:47:29

简单的BFS学习笔记的更多相关文章

  1. 广度优先搜索 BFS 学习笔记

    广度优先搜索 BFS 学习笔记 引入 广搜是图论中的基础算法之一,属于一种盲目搜寻方法. 广搜需要使用队列来实现,分以下几步: 将起点插入队尾: 取队首 \(u\),如果 $u\to v $ 有一条路 ...

  2. java maven、springmvc、mybatis 搭建简单Web项目学习笔记

    前言: 空余的时间,学学 Java,没准哪天用的到: 环境搭建折腾了好几天,总算搞顺了,也做个学习笔记,以防后面会忘记: 一.安装文件及介绍 JDK:jdk1.8.0 77 eclipse-maven ...

  3. CSS简单选择器的学习笔记

    我们知道通过CSS定义页面样式的时候要用到各种各样的选择器,正确的使用选择器是我们能够正确使用CSS做页面样式的基础.下面是我学习选择器的一个简易笔记,举一些简单的例子. 为了方便展示,我选择在内部的 ...

  4. python简介以及简单代码——python学习笔记(一)

    学习来源:https://www.liaoxuefeng.com/wiki/1016959663602400 了解python 简单编写并实现python代码 命令行模式和python交互模式 了解p ...

  5. 简单配置umiJS学习笔记

    最近跟着Antd-Pro官方教程学习umi,这里给大家推荐一下这个教程,特别适合初学者学习,教程涉及了AntD,AntD-Pro,umiJS,dvaJS等框架知识. 学习过程中跟着教程做了个Demo, ...

  6. Makefile的简单编写【学习笔记】

    首先我们先创建两个简单的文件: main.c #include <stdio.h> extern void hi_fun(); int main() { printf("hell ...

  7. 简单Linux命令学习笔记

    1.查看进程 ps -ef | grep 关键字       /*关键字为服务名*/ netstat -unltp | grep 关键字        /*关键字为服务名或者是端口均可*/ 2.杀死进 ...

  8. 简单的NHibernate学习笔记

    NHibernate是.NET平台下的ORM框架,与ADO.NET一样实现项目中数据库与项目系统的交互. .首先要用NHibernate框架就要有第三方的dll库来作为支持,附上百度云下载地址:(链接 ...

  9. 使用curator框架简单操作zookeeper 学习笔记

    Curator 操作是zookeeper的优秀api(相对于原生api),满足大部分需求.而且是Fluent流式api风格. 参考文献:https://www.jianshu.com/p/70151f ...

随机推荐

  1. 设计师Yoyo:为用户设计产品,让他们生活更美好

    Yoyo设计走过的路:纽约爱立信,西雅图美国在线,硅谷雅虎,ATT,深圳腾讯,华为:Yoyo不仅是顶级的交互体验设计师,还是很Open的知识分享者,从职业选择,以及对年轻人的建议几个角度,摘录他的文章 ...

  2. PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码

    PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...

  3. 分享一个用安卓手机就能引导pc安装linux系统办法

    1.首先安卓手机下载软件DriveDroid.apk http://pan.baidu.com/s/1qW4pbT6 2.下载linux镜像文件放手机存储卡存储,放到Download/images/以 ...

  4. javascript之函数节流

    对于高频率的事件触发,为了优化页面性能,我们一般会对其做函数节流.比如: resize.keydow.scroll事件等.用户的频繁操作,会导致事件高频率的执行,这样会出现页面抖动啊.频繁调接口啊等问 ...

  5. Linux系统的简介及Linux系统的安装

    一.写在前面  本文仅仅对Linux系统进行简要的概述已经对Linux系统的安装进行简要的介绍 二.完成目标 1.Linux操作系统的基本概念 2.Linux系统的安装 三.基本概念 1.什么是操作系 ...

  6. Dom0级事件

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. C 各种数据类型介绍

    1.各种数据类型介绍: 基本数据类型最主要的特点是,其值不可以再分解为其它类型.也就是说,基本数据类型是自我说明的. 1.1整型 整形包括短整型.整形和长整形. 1.1.1短整形 short a=1; ...

  8. DBI && MySQL lock

    DBI: url set isolation to dirty read my $npmdb_dbh = DBI->connect("DBI:ODBC:npmdb", &qu ...

  9. 00UILabel控件的详解

    文本属性 1.text:label显示的文字 2.font:text的字体,值不可以为nil,否则异常 3.textColor:text的颜色 4.textAlignment;text的对其方式 5. ...

  10. VB2012读取xml

    上回谢了生成写xml的,现在把读取的补上 文件如下 <?xml version="1.0" encoding="UTF-8" standalone=&qu ...