求解,dfs55分蒟蒻求助
查看原帖
求解,dfs55分蒟蒻求助
932569
I_AM_Nigger楼主2023/5/18 16:00
#include<bits/stdc++.h>
using namespace std;
#define f(a,c,b) for(int a = c;a<=b;a++)
int mp[1010][1010];
int vis[1010][1010];
int jiyi[1010][1010];
int tx[4] = {0,1,0,-1};
int ty[4] = {1,0,-1,0};
int m,n;
int ans = INT_MAX;
int dfs(int x,int y,int coin,bool magic)
{
	bool F = 0;
	if(jiyi[x][y] != -1 && jiyi[x][y] < coin)
	{
		return 0;
	}
	if(jiyi[x][y] != -1)
	{
		jiyi[x][y] = coin;
	}
	if(x == m and y == m)
	{
		ans = min(ans,coin);
		return 0;
	}
	for(int i = 0;i<4;i++)
	{
		int nx = x+tx[i];  int ny = y+ty[i];
		if(nx >= 1 && ny >= 1 && nx <= m && ny <= m && vis[nx][ny] != 1 && mp[nx][ny] != 0)
		{
			vis[nx][ny] = 1;
			dfs(nx,ny,coin + abs(mp[x][y] - mp[nx][ny]),0);
			F = 1;
			vis[nx][ny] = 0;
		}
		else if(mp[nx][ny] == 0 and magic == 0)
		{
			if(nx >= 1 && ny >= 1 && nx <= m && ny <= m && vis[nx][ny] != 1)
			{		
				vis[nx][ny] = 1;
				mp[nx][ny] = mp[x][y];
				dfs(nx,ny,coin+2,1);
				mp[nx][ny] = 0;
				vis[nx][ny] = 0;
			}
		}
	}
	return 0;
}
int main()
{
	cin >> m >> n;
	int x,y,z;
	memset(jiyi,-1,sizeof jiyi);
	f(i,1,n)
	{
		cin >> x >> y >> z;
		mp[x][y] = z+1;
	}
	dfs(1,1,0,0);
	if(ans != INT_MAX)
	{
		cout << ans << '\n';
	}
	else
	{
		cout << "-1\n";
	}
}

大犇快来看看啊!!!!

2023/5/18 16:00
加载中...