help!TLE!55!求助
查看原帖
help!TLE!55!求助
846618
e4ns楼主2023/10/1 22:46
#include<bits/stdc++.h>
using namespace std;
int mat[105][105],sum,m,cnt,minv=0x7f7f7f7f;
int dx[10]={0,1,0,-1},dy[10]={1,0,-1,0};
int visited[105][105];
void dfs(int x,int y)
{
	if(x==m&&y==m)
	{
		if(minv==0x7f7f7f7f||sum<minv)
			minv=sum;
		return;
	}
	if(x<1||y<1||x>m||y>m||cnt>1||visited[x][y])//非淳朴版
		return;
	visited[x][y]=1; 
	for(int i=0;i<4;i++)
	{
		int tx=x+dx[i],ty=y+dy[i];
		int dsum=0,now=mat[x][y],nxt=mat[tx][ty],tmp=cnt;
		if(nxt==-1)
		{
			cnt++;
			dsum=2;
			mat[tx][ty]=now;
		}
		else
		{
			if(nxt!=now)
				dsum=1;
			cnt=0;
		}
		sum+=dsum;
		dfs(tx,ty);
		sum-=dsum;
		mat[tx][ty]=nxt,cnt=tmp;
	}
	visited[x][y]=0;
}
int main()
{
	memset(mat,-1,sizeof(mat));
	int x,y,c,n;
	scanf("%d %d",&m,&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d %d %d",&x,&y,&c);
		mat[x][y]=c;
	}
	dfs(1,1);
	printf("%d",minv);
	return 0;
}

哪位大佬过来帮忙一下

2023/10/1 22:46
加载中...