你有些地方没判断到,我照你的思路打了一下
```
#include<bits/stdc++.h>
using namespace std;
int n,m,ans=1;
int v[1000][1000],a[1000][1000];
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
stack<int> stx;
stack<int> sty;
int check(int x,int y,int d){
x+=dx[d];y+=dy[d];
if(x<1||y<1||y>n||x>n) return 0;
if(a[x][y]==1) return 0;
return 1;
}
void dfs(int x,int y,int d,int sum){
// if(check(x,y)==0) return;
// for(int i=0;i<4;i++){
//// cout<<"sidhaoiudh"<<endl;
// int s=0;int nx=x+dx[i],ny=y+dy[i];
// if(check(nx,ny)==0) continue;
// while(check(nx,ny)==1){
// s++;
// v[nx][ny]=1;
// nx+=dx[i];ny+=dy[i];
// }
// if(v[nx][ny]==1){
// ans=max(ans,sum+s);
// break;
// }
// dfs(nx-dx[i],ny-dy[i],sum+s);
//// for(int j=1;j<=s;j++){
//// nx-=dx[i];ny-=dy[i];
//// v[nx][ny]=0;
//// }
// }
int nx=x,ny=y;
for(int i=0;i<4;i++)
if(v[x+dx[i]][y+dy[i]]==1) ans=max(ans,sum+1);
if(check(x,y,d)==0) return;
while(check(nx,ny,d)==1){
v[nx][ny]=1;
// stx[++top]=nx;sty[top]=ny;
stx.push(nx);sty.push(ny);
nx+=dx[d];ny+=dy[d];sum++;
if(v[nx][ny]==1){
if(sum>ans) ans=sum;
// cout<<"asidhaiusbda"<<endl;
// cout<<ans<<endl;
return;
}
}
int dl=(d+1)%4,dr=(d+3)%4;
dfs(nx,ny,dl,sum);dfs(nx,ny,dr,sum);
while(stx.top()!=x||sty.top()!=y) {
v[stx.top()][sty.top()]=0;stx.pop();sty.pop();
}
return;
}
int main(){
cin>>n>>m;
char x;int y;
for(int i=1;i<=m;i++){
cin>>x>>y;
a[x-'A'+1][y]=1;
}
// v[1][1]=1;
if(check(1,1,1)) dfs(1,1,1,0);
if(check(1,1,2)) dfs(1,1,2,0);
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++)
// cout<<a[i][j];
// cout<<endl;
// }
cout<<ans<<endl;
return 0;
}
```
by RAIH @ 2021-04-11 16:53:09