题目链接:https://www.luogu.org/recordnew/show/10464387
【问题分析】
分层图最短路径问题。
【建模方法】
用P位二进制表示当前获得的钥匙状态,建立2^P层图。每层图表示在当前钥匙状态下的地图,每获得一把钥匙进入新的一层,BFS求最短路即可。
明明就是状压+BFS为什么会出现在网络流24题里???
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
struct node
{
int step,x,y,state;
//分别记录格子的坐标,步数,有哪些钥匙
node(){}
node(int _x,int _y,int _step,int _state)
{
x = _x,y = _y;
step = _step,state = _state;
}
};
int n,m,p;
int mp[51][51][51][51];//记录地图信息
int to[4][2] = {1,0,0,1,-1,0,0,-1};
int key[51][51];//每一个格子的钥匙有哪些
bool vis[51][51][1 << 10];//标记格子状态,避免重复访问
bool judge(int x,int y)
{
if(x <= 0 || y <= 0 || x > n || y > m) {
return 0;
}
return 1;