还剩半小时才报名月赛,草草看了第二题,结束时没写完,现在写完。但是现在还不能提交,请大佬帮我看(测一下)我的代码有没有问题。码风、思路可能有点清奇,勿喷。
#include<bits/stdc++.h>
using namespace std;
int t,a,b,d[2005][2005],cnt;
char s[2005][2005],ans[5000005];
bool flag,is,vis[2005][2005];
int fx[]={0,0,0,1,-1};
int fy[]={0,1,-1,0,0};
void dfs(int x,int y,int step)
{
d[x][y]=step;
if(x==a&&y==b)
{
flag=1;
is=1;
cnt=min(cnt,step);
return;
}
for(int i=1;i<=4;i++)
{
int tx=x+fx[i],ty=y+fy[i];
if(s[x][y]!=s[tx][ty]&&tx>=1&&tx<=a&&ty>=1&&ty<=b&&step+1<d[tx][ty])
{
vis[x][y]=1;
is=0;
char tmp=ans[step+1];
switch(i)
{
case 1:ans[step+1]='D';break;
case 2:ans[step+1]='U';break;
case 3:ans[step+1]='R';break;
case 4:ans[step+1]='L';break;
}
dfs(tx,ty,step+1);
vis[x][y]=0;
if(!is)ans[step+1]=tmp;
}
}
}
int main()
{
cin>>t;
while(t--)
{
cnt=INT_MAX;
flag=0;
cin>>a>>b;
memset(ans,0,sizeof(ans));
for(int i=1;i<=a;i++)
{
for(int j=1;j<=b;j++)
d[i][j]=INT_MAX;
}
for(int i=1;i<=a;i++)
{
for(int j=1;j<=b;j++)
cin>>s[i][j];
}
dfs(1,1,0);
if(!flag)cout<<-1<<endl;
else{
cout<<d[a][b]<<endl;
for(int i=1;i<=cnt;i++)
cout<<ans[i];
cout<<endl;
}
}
return 0;
}
就是急切想知道结果。