求助!
查看原帖
求助!
704634
poor_OIer楼主2023/5/28 20:42

第17个点WA

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,n;
int save[105][105],mapp[105][105],flag[105][105]={0};
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
void dfs(int x,int y,int t)
{
	int i,j;
	if(x<1||x>m||y<1||y>m)
		return;
	for(i=0;i<4;i++)
	{
		int nx,ny,q,nt=-1;
		nx=x+dx[i];
		ny=y+dy[i];
		if(nx<1||nx>m||ny<1||ny>m||flag[nx][ny]==1)
			continue;
		if(t!=-1)
		{
			if(mapp[nx][ny]!=-1)
			{
				if(t!=mapp[nx][ny])
					q=1;
				else
					q=0;
			}
			else
				continue;
		}
		else
		{
			if(mapp[nx][ny]==-1)
			{
				q=2;
				nt=mapp[x][y];
			}
			else
			{
				if(mapp[x][y]!=mapp[nx][ny])
					q=1;
				else
				    q=0;
			} 
		}
		if(save[nx][ny]>save[x][y]+q)
		{
			save[nx][ny]=save[x][y]+q;
			flag[x][y]=1;
			dfs(nx,ny,nt);
			flag[x][y]=0;
		}
	}
}
signed main()
{
	cin>>m>>n;
	for(int i=1;i<=m;i++)
		for(int j=1;j<=m;j++)
			save[i][j]=99999999;
	save[1][1]=0;
	for(int i=1;i<=m;i++)
		for(int j=1;j<=m;j++)
			mapp[i][j]=-1;
	for(int i=1;i<=n;i++)
	{
		int x,y,c;
		cin>>x>>y>>c;
		mapp[x][y]=c;
	}
	flag[1][1]=1;
	dfs(1,1,-1);
	cout<<save[m][m];
	return 0;
}

请大佬指教。

2023/5/28 20:42
加载中...