今天就直接放AC代码了
#include <iostream>
#include <algorithm>
#include <utility>
#include <cstring>
#include <queue>
using namespace std;
int shortR,shortL;
int list[41][41];
int mark[41][41];
void judgeR(int x,int y,int nx,int ny,int dir,int dis);
void judgeL(int x,int y,int nx,int ny,int dir,int dis);
void dfsL(int x,int y,int nx,int ny,int dir,int dis){
if(list[ny][nx]==-1||nx<0||nx>=x||ny<0||ny>=y||mark[ny][nx]>=5)return;
if(list[ny][nx]==2&&!mark[ny][nx]){
shortL = max(dis,shortL);
mark[ny][nx]++;
return;
}
if(list[ny][nx]==1||list[ny][nx]==0){
mark[ny][nx]++;
judgeL(x,y,nx,ny,dir,dis);
}
}
void judgeL(int x,int y,int nx,int ny,int dir,int dis){
if(dir==0){
dfsL(x,y,nx+1,ny,3,dis+1);
dfsL(x,y,nx,ny-1,0,dis+1);
dfsL(x,y,nx-1,ny,1,dis+1);
dfsL(x,y,nx,ny+1,2,dis+1);
}else if(dir