bfs算法模版

bfs算法模版

写过很多bfs题,每次写bfs代码习惯都略有不同,有些糟糕的代码习惯影响了解题速度

下面这份简单的三维bfs可以算是写得比较不错的一份了,以后按这种习惯写,虽然没有写回溯路径,但回溯路径很简单,只要加个fa数组就行了,所以就不加在模版上了

//bfs模版
int X,Y,Z;
char ch[maxn][maxn][maxn];
bool vis[maxn][maxn][maxn];
int sx,sy,sz;
int ans;
int dx[]={-1,1,0,0,0,0};
int dy[]={0,0,-1,1,0,0};
int dz[]={0,0,0,0,-1,1};

struct node
{
    int x,y,z;
    int dist;
};

bool bfs()
{
    queue<node> q;
    q.push({sx,sy,sz,0});
    vis[sx][sy][sz]=1;
    while(!q.empty()){
        node now=q.front();
        q.pop();
        for(int i=0;i<6;i++){
            int nx=now.x+dx[i];
            int ny=now.y+dy[i];
            int nz=now.z+dz[i];
            int nd=now.dist+1;
            if(ch[nx][ny][nz]==‘E‘){
                ans=nd;
                return true;
            }
            if(ch[nx][ny][nz]==‘#‘) continue;
            if(vis[nx][ny][nz]) continue;
            vis[nx][ny][nz]=1;
            q.push({nx,ny,nz,nd});
        }
    }
    return false;
}

bfs模版

时间: 2024-10-09 21:40:25

bfs算法模版的相关文章

[算法模版]树的重心和直径

[算法模版]树的重心和直径 树的重心 引自OI-WIKI 定义 以树的重心为根时,所有的子树(不算整个树自身)的大小都不超过整个树大小的一半. 找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心. 删去重心后,生成的多棵树尽可能平衡. 性质 树中所有点到某个点的距离和中,到重心的距离和是最小的:如果有两个重心,那么他们的距离和一样. 把两棵树通过一条边相连得到一棵新的树,那么新的树的重心在连接原来两个树的重心的路径上. 在一棵树上添加或删除一个叶子,那么它的重心最多只移动

kmp算法模版

kmp算法模版 kmp是在字符串s中匹配字符串t的一种高效算法,朴素的暴力是o(n*m) ,kmp复杂度是o(n+m) /** 调用 ans=kmp(s,t),s为原串,返回t在s的位置(首位置为1),找不到着返回0. */ char s[maxn],t[maxn]; int next[maxn]; void get_next(char* t) { next[1]=0; for(int i=1,j=0;i<strlen(t);){ if(j==0||t[i-1]==t[j-1]){ i++;j+

算法入门经典第六章 例题6-14 Abbott的复仇(Abbott&#39;s Revenge)BFS算法实现

Sample Input 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF * 2 2 SL WF ELF * 2 3 SFR EL * 0 Sample Output (3,1) (2,1) (1,1) (1,2) (2,2) (2,3) (1,3) (1,2) (1,1) (2,1) (2,2) (1,2) (1,3) (2,3) (3,3) 析 题目的大意是,输入起点,离开起点时的朝向和终点,求一条最短路. 每一个

Hopcroft-Karp算法模版

#include <cstdio> #include <cstring> #include <vector> #include <queue> #include <stack> #include <cmath> using namespace std; const int maxn = 3010; const int INF = 1<<28; int dx[maxn], dy[maxn]; int cx[maxn], cy

带权二分图的最大权匹配 KM算法模版

带权二分图的最大权匹配 KM算法模版 下面是kuangbin大神的模版,已通过西电oj1048的测试 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<vector> #include<stack> #include<queue> #include<set

Hdu 1083 Courses(匈牙利算法模版题)

Hdu 1083 题意:给你一个p表示测试组数,给你n和m表示课的个数和学生的个数,接下来n行首数字i表示该堂课的学生代表人数,之后为i个学生编码,问能否为每堂课找到一个学生课代表且不冲突: 题解:匈牙利算法模版 另附简单易懂匈牙利算法讲解:传送门 #include<cstring> #include<cstdio> const int N =305; using namespace std; bool h[N][N]; bool vis[N]; int link[N]; int

BFS算法(——模板习题与总结)

首先需要说明的是BFS算法(广度优先算法)本质上也是枚举思想的一种体现,本身效率不是很高,当数据规模很小的时候还是可以一试的.其次很多人可能有这样的疑问,使用搜索算法的时候,到底选用DFS还是BFS,博主觉得对于最短路搜索来说是都可以的,数据规模不大,广搜解决最短路的效率要高一些,还有对于搜索过程中搜索的单位为1时,广搜更合适. 这里总结一下BFS算法,DFS是一条路走到黑,不行再回退一步,直到所有的路都试一遍,而BFS则是需要有一种层的概念,每次走到一个状态,将该层所有可能的状态都加入队列,直

[算法模版]莫队

[算法模版]莫队 莫队是一个极其有意思的玄学算法,常用于暴力骗分. 首先,莫队是通过暴力转移区间来求解答案的.那么显然,完成单组询问复杂度是\(O\left(x^{*}(|r 1-r 2|+|(l1-l2 |))\right.\).其中\(x\)为每次的转移复杂度. 莫队算法的总复杂度是\(n \sqrt m\).(虽然我也不知道怎么证的) 莫队的精髓在于将序列分块,块的大小也因题而异.对于不带修的普通莫队,最优分块方法是 而对于带修改的莫队,分块方法是: 带修莫队只要添加一个第三关键字--按照

[算法模版]AC自动机

[算法模版]AC自动机 基础内容 板子不再赘述,OI-WIKI有详细讲解. \(query\)函数则是遍历文本串的所有位置,在文本串的每个位置都沿着\(fail\)跳到根,将沿途所有元素答案++.意义在于累计所有以当前字符为结尾的所有模式串的答案.看代码就能很容易的理解. 另外\(e[i]\)记录的是第\(t\)个模式串结尾是哪个节点(所有节点均有唯一的编号). 贴个P5357 [模板]AC自动机(二次加强版)板子: #include<iostream> #include<cstdio&