蒟蒻又来求救大佬了!
查看原帖
蒟蒻又来求救大佬了!
339299
osfly楼主2021/2/9 12:15

#1 #5 #8 #10 #12 AC,其他全部WA

蒟蒻用记搜的dfs

#include<cstdio>
#include<cstring>
struct csm
{
	int x1,y1;
	int x2,y2;
	bool tmp;
}c[30];
int N,M;
char g[305][305];
bool vis[305][305];
int f[305][305];
int minn=0x3f3f3f3f;
int nxtx[4]={1,-1,0,0};
int nxty[4]={0,0,1,-1};
void dfs(int x,int y,int step)
{
	if(step>minn) return ;
	if(g[x][y]=='=')
	{
		if(minn>step) minn=step;
		return ;
	}
	vis[x][y]=1;
	if(step>=f[x][y]) return ;
	f[x][y]=step;
	for(int i=0;i<4;i++)
	{
		int nx=x+nxtx[i];
		int ny=y+nxty[i];
		if(vis[nx][ny]||g[nx][ny]=='#') continue;
		if(g[nx][ny]>='A'&&g[nx][ny]<='Z')
		{
			if(nx==c[g[nx][ny]-'A'].x1&&ny==c[g[nx][ny]-'A'].y1)
			{
				if(!vis[c[g[nx][ny]-'A'].x2][c[g[nx][ny]-'A'].y2]) dfs(c[g[nx][ny]-'A'].x2,c[g[nx][ny]-'A'].y2,step+1);	
			}
			else if(!vis[c[g[nx][ny]-'A'].x1][c[g[nx][ny]-'A'].y1]) dfs(c[g[nx][ny]-'A'].x1,c[g[nx][ny]-'A'].y1,step+1);
		}
		else dfs(nx,ny,step+1);
	}
	vis[x][y]=0;
}
int main()
{
	memset(f,0x3f3f3f3f,sizeof(f));
	int x,y;
	scanf("%d%d",&N,&M);
	for(int i=1;i<=N;i++)
		for(int j=1;j<=M;j++)
		{
			scanf(" %c",&g[i][j]);
			if(g[i][j]=='@')
			{
				x=i;
				y=j;
			}
			if(g[i][j]>='A'&&g[i][j]<='Z')
			{
				if(!c[g[i][j]-'A'].tmp)
				{
					c[g[i][j]-'A'].x1=i;
					c[g[i][j]-'A'].y1=j;
					c[g[i][j]-'A'].tmp=1;
				}
				else
				{
					c[g[i][j]-'A'].x2=i;
					c[g[i][j]-'A'].y2=j;
				}
			}
		}
	dfs(x,y,0);
	printf("%d",minn);
	return 0;
}
2021/2/9 12:15
加载中...