急切想测题
  • 板块灌水区
  • 楼主Hy13_xsm
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/3/9 18:13
  • 上次更新2024/3/9 20:15:58
查看原帖
急切想测题
1079493
Hy13_xsm楼主2024/3/9 18:13

还剩半小时才报名月赛,草草看了第二题,结束时没写完,现在写完。但是现在还不能提交,请大佬帮我看(测一下)我的代码有没有问题。码风、思路可能有点清奇,勿喷。

#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;
}

就是急切想知道结果。

2024/3/9 18:13
加载中...