简单的BFS学习笔记
什么是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学习笔记的更多相关文章
- 广度优先搜索 BFS 学习笔记
广度优先搜索 BFS 学习笔记 引入 广搜是图论中的基础算法之一,属于一种盲目搜寻方法. 广搜需要使用队列来实现,分以下几步: 将起点插入队尾: 取队首 \(u\),如果 $u\to v $ 有一条路 ...
- java maven、springmvc、mybatis 搭建简单Web项目学习笔记
前言: 空余的时间,学学 Java,没准哪天用的到: 环境搭建折腾了好几天,总算搞顺了,也做个学习笔记,以防后面会忘记: 一.安装文件及介绍 JDK:jdk1.8.0 77 eclipse-maven ...
- CSS简单选择器的学习笔记
我们知道通过CSS定义页面样式的时候要用到各种各样的选择器,正确的使用选择器是我们能够正确使用CSS做页面样式的基础.下面是我学习选择器的一个简易笔记,举一些简单的例子. 为了方便展示,我选择在内部的 ...
- python简介以及简单代码——python学习笔记(一)
学习来源:https://www.liaoxuefeng.com/wiki/1016959663602400 了解python 简单编写并实现python代码 命令行模式和python交互模式 了解p ...
- 简单配置umiJS学习笔记
最近跟着Antd-Pro官方教程学习umi,这里给大家推荐一下这个教程,特别适合初学者学习,教程涉及了AntD,AntD-Pro,umiJS,dvaJS等框架知识. 学习过程中跟着教程做了个Demo, ...
- Makefile的简单编写【学习笔记】
首先我们先创建两个简单的文件: main.c #include <stdio.h> extern void hi_fun(); int main() { printf("hell ...
- 简单Linux命令学习笔记
1.查看进程 ps -ef | grep 关键字 /*关键字为服务名*/ netstat -unltp | grep 关键字 /*关键字为服务名或者是端口均可*/ 2.杀死进 ...
- 简单的NHibernate学习笔记
NHibernate是.NET平台下的ORM框架,与ADO.NET一样实现项目中数据库与项目系统的交互. .首先要用NHibernate框架就要有第三方的dll库来作为支持,附上百度云下载地址:(链接 ...
- 使用curator框架简单操作zookeeper 学习笔记
Curator 操作是zookeeper的优秀api(相对于原生api),满足大部分需求.而且是Fluent流式api风格. 参考文献:https://www.jianshu.com/p/70151f ...
随机推荐
- MD5和SHA512Managed ——哈希算法
本文来自:http://www.cnblogs.com/chuncn/archive/2008/02/26/1082418.html C#的哈希 哈希算法是啥?哈希英文hash,是一种数学算法,它能把 ...
- SharePoint Search之(一):创建Search服务应用程序
计划写一个关于怎样使用SharePoint Search的系列,包括下面几个方面: (一)创建Search Service Application (二)持续爬网(continues crawl) ( ...
- C和指针 (pointers on C)——第五章:操作符和表达式
第五章 操作符和表达式 这一章假设没做过玩过单片机.汇编的话,读起来可能比較吃力,尤其是在移位运算符.位运算符应用上.另外多注意一下左值和右值的理解. 总结: 算术操作符.赋值操作符.关系操作符.条件 ...
- PHP高级特性基础
php对象在内存中的区域:php对象名和对象存放的位置是不一样的,这一点和java是一模一样的,所以在php面向对象部分你完全可以套用java的思想去做.对象存放在堆区(heap)而对象名则和其他普通 ...
- hadoop结构出现后format变态
14/07/10 18:50:47 FATAL conf.Configuration: error parsing conf file: com.sun.org ...
- Java程序员应该知道的10个面向对象理论
英文原文:10-object-oriented-design-principles 面向对象理论是面向对象编程的核心,但是我发现大部分 Java 程序员热衷于像单例模式.装饰者模式或观察者模式这样的设 ...
- ubuntu 11.04安装笔记
首先,本文查询了网络中各位大大的经验共享,特别是<UltraISO制作U盘启动Ubuntu 8.10 LiveCD>,地址在http://blog.sina.com.cn/s/blog_5 ...
- About Quick Packaging and Custom Packaging
About Quick Packaging and Custom Packaging The Enterprise Manager Support Workbench provides two met ...
- ASP.NET MVC 学习之路-6
本文在于巩固基础 上文中使用的Code First创建数据库 本文将使用数据库生成模型 这里使用ADO.NET实体数据模型来生成模型 下面按照指导完成操作 下面看看如何使用这个框架 数据访问修改主要是 ...
- document load 与document ready的区别
页面加载完成有两种事件 1.load是当页面所有资源全部加载完成后(包括DOM文档树,css文件,js文件,图片资源等),执行一个函数 问题:如果图片资源较多,加载时间较长,onload后等待执行的函 ...