判重3个状态就够了 位置+钥匙
除了#位置,其他位置都可以经过多次
注意钥匙数可以为零
因为打蛇要time+2,所以用优先队列
蛇的数量<=5,所以1<<5的数就足够保存蛇的状态了
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100+5;
int N,K,vis[maxn][maxn][10]; //判重三个状态表示就够了
int r0,c0,r1,c1;
char G[maxn][maxn];
struct Point{
int x,y,time,key,snack;
Point(int x,int y,int t,int k,int s):x(x),y(y),time(t),key(k),snack(s){}
bool operator < (const Point& p) const {
return time>p.time;
}
};
bool inside(int x,int y)
{
return x>=0&&x<N&&y>=0&&y<N;
}
int bfs(int r,int