什么是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. 聚类算法初探(五)DBSCAN

    最近由于工作需要,对聚类算法做了一些相关的调研.现将搜集到的资料和自己对算法的一些理解整理如下,供大家参考. 另外在算法代码方面,我也做了一些实现(包括串行和并行),欢迎感兴趣的朋友探讨和交流. 第一 ...

  2. Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等

    写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...

  3. EK中fromCharCode和parseInt的配合使用

    基于web的漏洞攻击的第一步一般是:在landing page中通过<script>标签下的JavaScript脚本引入一些恶意链接.这些脚本往往会採用各种各样的混淆.加密手法来躲避AV和 ...

  4. css3动画之animate

    CSS3 动画属性 下面的表格列出了 @keyframes 规则和所有动画属性: 语法:div{animation: 动画名称 一个周期播放时间 速度曲线 延迟时间 下个周期是否逆向} @keyfra ...

  5. Angular初级入门

    1:jquery :库 -一般是封装了一些方法 -我们去调用他的这些方法分 2:angular:框架 -框架是提供了一些规则或者模式 -我们是根据这一种规则或者模式去写代码 -然后接下来就由angul ...

  6. JavaScript中forEach的用法相关

    首先说下JavaScript的forEach的标准格式. 为数组中的每个元素执行指定操作. array1.forEach(callbackfn[, thisArg]) 参数 定义 array1 必需. ...

  7. UVA 12219 Common Subexpression Elimination

    题意: 求最小的表达式树,也就是把相同的表达式子树给替换成最前面相同的编号. 分析: 用map<string,int>smp;存放子树对应的字符串,如果以后出现相同的子树则用相同编号表示. ...

  8. mysql 重启

    /etc/init.d/mysql restart /etc/init.d/mysql stop /etc/init.d/mysql start

  9. CRC循环校验码

    为了防止数据在传输的时候丢失或被篡改,有了各种校验码. 每种CRC校验都有自己的多项式.每个多项式都有唯一对应的二进制. CRC16就如果名字一样,校验码就是16位的 如果CRC32就是32位的. 原 ...

  10. linux ftp 安装及相关命令

    1.VSFTP简介 VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSF ...