T2用记忆化搜索为什么会莫名WA,求教,请问正确算法是什么?
#include<bits/stdc++.h>
using namespace std;
int n,m,fx,fy,le=0;
int fxx[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int t[1005][1005],c[1005][1005];
int maxn(int a,int b)
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
void sc()
{
int cc=-1,cx,cy;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(c[i][j]>cc)
{
cc=c[i][j];
cx=i;cy=j;
}
}
}
cout<<char(t[cx][cy]);
while(c[cx][cy]>=2)
{
char mq=0;
for(int k=0;k<=3;k++)
{
int xx=cx+fxx[k][0];
int yy=cy+fxx[k][1];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&c[xx][yy]+1==c[cx][cy]&&t[xx][yy]>mq)
{
mq=t[xx][yy];
cx=xx,cy=yy;
}
}
cout<<char(t[cx][cy]);
}
}
int dfs(int x,int y)
{
if(c[x][y])
{
return c[x][y];
}
if(t[x][y]==10000000)
{
c[x][y]=-10000;
return 0;
}
c[x][y]=1;
for(int k=0;k<=3;k++)
{
int xx=x+fxx[k][0];
int yy=y+fxx[k][1];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&t[xx][yy]<t[x][y])
{
c[x][y]=maxn(c[x][y],dfs(xx,yy)+1);
}
}
return c[x][y];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
getchar();
for(int j=1;j<=m;j++)
{
char sr;
sr=getchar();
if(sr=='#')
{
t[i][j]=10000000;
}
else
{
t[i][j]=int(sr);
}
c[i][j]=0;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
dfs(i,j);
}
}
sc();
return 0;
}