自己也没有开多大的数组,样例也输出正常,请问各位大佬,帮我指出 MLE 原因。 code:
#include <bits/stdc++.h>
using namespace std;
char a[1005][1005];
int n, m, b[1005][1005], c[1005][1005], da = 0, f;
void dfs1(int x, int y){
if(x<0||x>=n||y<0||y>=n||f==0||f==1||x<1&&a[x][y]=='u'||x>=n - 1&&a[x][y]=='d'||y<1&&a[x][y]=='l'||y>=n - 1&&a[x][y]=='r'){
if(f!=1){
f = 0;
}
return;
}
if(a[x][y]=='o'||b[x][y]!=-1){
f = 1;
return;
}
if(x>=1&&a[x][y]=='u'){
c[x - 1][y] = 1;
dfs1(x - 1, y);
}
if(x<=n - 2&&a[x][y]=='d'){
c[x + 1][y] = 1;
dfs1(x + 1, y);
}
if(y>=1&&a[x][y]=='l'){
c[x][y - 1] = 1;
dfs1(x, y - 1);
}
if(y<=n - 2&&a[x][y]=='r'){
c[x][y + 1] = 1;
dfs1(x, y + 1);
}
}
void dfs2(int x, int y){
if(x<0||x>=n||y<0||y>=n){
return;
}
if(f==1&&!c[x][y]){
da++;
}
if(a[x][y]=='o'||b[x][y]!=-1){
da++;
return;
}
if(x>=1&&a[x][y]=='u'){
dfs2(x - 1, y);
b[x - 1][y] = f;
}
if(x<=n - 2&&a[x][y]=='d'){
dfs2(x + 1, y);
b[x + 1][y] = f;
}
if(y>=1&&a[x][y]=='l'){
dfs2(x, y - 1);
b[x][y - 1] = f;
}
if(y<=n - 2&&a[x][y]=='r'){
dfs2(x, y + 1);
b[x][y + 1] = f;
}
}
int main(){
scanf("%d %d", &n, &m);
memset(b, -1, sizeof(b));
memset(c, 0, sizeof(c));
for(int i = 0;i<=n - 1;i++){
scanf("%s", a[i]);
}
for(int i = 0;i<=n - 1;i++){
for(int j = 0;j<=m - 1;j++){
f = 2;
if(b[i][j]==-1){
c[i][j] = 1;
dfs1(i, j);
if(f!=2){
dfs2(i, j);
}
}else if(b[i][j]==1){
da++;
}
}
}
printf("%d", da);
return 0;
}