转自:欣哥

下面是bfs一般的形式,谈不上模板
但一般都这么来做
有点乱
有什么多交流

bfs一般用于求最短时间

#include<stdio.h>
#include<queue>
using namespace std; 上面是头文件定义

struct stu 开两个结构体abc,xyz,一般都开两个
{
int x;
int y;
int t;
}abc,xyz;

queue<struct stu> p; 定义一个struct stu型STL队列

int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}} 方向数组

char map[50][50] 地图,一般不超过50*50

int a,b,c,t,flag; 全局变量,一般是地图大小等

void bfs() 进入bfs
{
int i;

while(!p.empty())队列为空时跳出
{
abc=p.front(); 从队首读入
p.pop(); 删除队首

if()这里一般判断现在abc结构体所指的 map[][] 是否为最终目标
{
。。。。。
return;
}

for(i=0;i<4;i++) 循环周围四个方向
{
xyz.x=abc.x+dir[i][0]; xyz.x用于记录由abc产生的新的横坐标
xyz.y=abc.y+dir[i][1]; xyz.y用于记录由abc产生的新的纵坐标

if((xyz.x>=1&&xyz.x<=a)&&(xyz.y>=1&&xyz.y<=b))&&(!map[xyz.x][xyz.y])) 如果新坐标还在迷宫里且不是墙
{

xyz.t=abc.t+1; 时间+1
p.push(xyz); 压入队尾

map[xyz.x][xyz.y]=1; 标记为走过
}
}

}
}
int main()
{

int k,i,j,r;
scanf("%d",&k);
while(k--)
{
scanf("%d%d%d%d",&a,&b,&c,&t);
for(i=1;i<=a;i++)
{
for(j=1;j<=b;j++)
{
scanf("%d",&map[i][j]);
}
}

flag=-1;
abc.x=abc.y=abc.z=1;
abc.t=0;
p.push(abc);

bfs();

while(!p.empty()) 清空队列,否则影响下一组输入
{
p.pop();
}
}
return 0;
}

BFS 模板的更多相关文章

  1. HDU5012:Dice(bfs模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=5012 Problem Description There are 2 special dices on the ...

  2. POJ-2251 Dungeon Master (BFS模板题)

    You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...

  3. BFS (1)算法模板 看是否需要分层 (2)拓扑排序——检测编译时的循环依赖 制定有依赖关系的任务的执行顺序 djkstra无非是将bfs模板中的deque修改为heapq

    BFS模板,记住这5个: (1)针对树的BFS 1.1 无需分层遍历 from collections import deque def levelOrderTree(root): if not ro ...

  4. PAT1076. Forwards on Weibo(标准bfs模板)

    //标准的层次遍历模板 //居然因为一个j写成了i,debug半天.....解题前一定要把结构和逻辑想清楚,不能着急动手,理解清楚题意,把处理流程理清楚再动手,恍恍惚惚的写出来自己慢慢debug吧 # ...

  5. 图的遍历——DFS和BFS模板(一般的图)

    关于图的遍历,通常有深度优先搜索(DFS)和广度优先搜索(BFS),本文结合一般的图结构(邻接矩阵和邻接表),给出两种遍历算法的模板 1.深度优先搜索(DFS) #include<iostrea ...

  6. POJ:Dungeon Master(三维bfs模板题)

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16748   Accepted: 6522 D ...

  7. hdu1242 又又又是逃离迷宫(bfs模板题)

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1242/ 这次的迷宫是有守卫的,杀死一个守卫需要花费1个单位的时间,所以以走的步数为深度,在每一层进行搜索,由于走 ...

  8. 2014 网选 5012 Dice(bfs模板)

    /* 题意:就是给定两个筛子,每个筛子上6个面,每个面的数字属于[1,6], 且互不相同! 问a筛子最少经过按照题目规定的要求转动,达到和b筛子上下左右前后的数字相同! 思路:很直白的bfs,将每一种 ...

  9. HRBUST 1181 移动 bfs模板

    #include<bits/stdc++.h>///该头文件为万能头文件,有些学校oj不能使用,读者可根据需要自行修改 using namespace std; ; int vis[MAX ...

随机推荐

  1. Mvc中把list从View传入Controller

    public class User { public string Name { get; set; } public bool IsChecked { get;set;} public int Ag ...

  2. Linq--扩展方法

    如果现在有一个这样的需求,求筛选出来的大于20MB的进程的和,常用的方法是写一个静态方法传进去一个ProcessData列表 比如: public static Int64 TotalMemory( ...

  3. 1106. Lowest Price in Supply Chain (25)

    A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...

  4. 1093. Count PAT's (25)

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  5. 对现有Hive的大表进行动态分区

    分区是在处理大型事实表时常用的方法.分区的好处在于缩小查询扫描范围,从而提高速度.分区分为两种:静态分区static partition和动态分区dynamic partition.静态分区和动态分区 ...

  6. Array和ArrayList的异同点【转】

    相信数组是大家在编程最常使用的,不论任何语言都存在数组这样的数据结构,由于C#语言是完全面向对象的,所以在C#中的数组也是对象,实际上就是Array类的实例,Array类的使用可以说是使用最频繁的,只 ...

  7. Linux内核学习方法

    Makefile不是Make Love 从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉.毕业的时候,人家跟我说Makefile我完全不知,但是一说Make Love我就来劲了 ...

  8. C++中的struct和class的区别

    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能.struct能包含成员函数吗? 能!struct能继承吗? 能!!stru ...

  9. Redis 二:入门基本篇

    .多数据库设置 - ,代表16个数据库 .glob风格通配符 keys * 返回所有 keys ba? 返回 bar keys b[a-z][a-z] 返回btt bar \x 匹配转义字符 .判断一 ...

  10. UML 小结(5)- 图解 Rational Rose 的详细安装过程

    在学习UML的时候,会用到画图工具:Rotional Rose . 原以为这款软件直接下载下来或者跟朋友那边拷过来就可以直接用了,结果却是没有那么简单,如果读者您也是为了解决这个家伙的安装问题的话,那 ...