传送门
题目大意:
一个N×M的矩阵,其中格子上有个数字,代表可以水流的方向,如果沿着水流走不需要消耗能量,你也可以不沿着水流走,但要消耗1个能量,问从起始点到目的地至少要多少能量?
解题思路:
第一次知道01bfs可以用来求解最短路的问题,01bfs顾名思义就是相当于边的权重要么是1要么是0,简单点说其实就是把普通BFS的queue换成deque,如果代价为0则emplace_front,否则代价为1emplace_back。因为距离的松弛,可以不用使用vis数组判断是否重复入队。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
#define pb emplace_back
#define LOCAL
using namespace std;
const int mod = 1e9+7;
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+5;
typedef long long ll;
typedef pair<int,int> Pii;
template <typename T>inline void read(T& t){
char c=getchar();t=0;
int f=1;
while(!isdigit