题目自己看,链接:最后的迷宫-洛谷
(脑袋有问题的人也知道这是道BFS题)
N×M≤16384,这道题本身内存有点小,极限数据是1≤N,M≤16384,因为N和M有可能是1。一开始我MLE了,但最终还是卡数据卡过去了。
话不多说,代码整上。
首先是最基本的头文件、变量、位移数组。
#include<bits/stdc++.h>
using namespace std;
const int dx[]={1,0,-1,0,1,-1,1,-1};
const int dy[]={0,1,0,-1,1,1,-1,-1};
int n,m;
char mz[16395/2][16395/2];
int jbx,jby,hpx,hpy;
bool vis[16395/2][16395/2];
然后是check()函数,用于判断是否能看见奖杯。
bool check(int x,int y)
{
for(int dir=0;dir<8;dir++)
{
int nx=x;
int ny=y;
if(nx==jbx&&ny==jby)return true;
while(nx<=n&&nx>=1&&ny<=m&&ny>=1)
{
nx+=dx[dir];
ny+=dy[dir];
if(mz[nx]