p3956 求捞
  • 板块灌水区
  • 楼主Huchangzhi
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/3 09:12
  • 上次更新2024/8/3 10:52:52
查看原帖
p3956 求捞
1031975
Huchangzhi楼主2024/8/3 09:12

@General0826

#include <bits/stdc++.h>
using namespace std;
int qp[110][110], fx[5]={0,1,-1,0,0}, fy[5]={0,0,0,1,-1}, zx=20000;
int m, n, qpzx[110][110]={};
bool bj[110][110]={}, gb[110][110]={};
void dfs(int x, int y, int jb){
	if(x == m && y == m){
		zx = min(zx, jb);
		return ;
	}
	if(jb > qpzx[x][y] && qpzx[x][y] != 0){
		return ;
	}
	bj[x][y] = true;
	qpzx[x][y] = jb;
	for(int i=1;i<=4;i++){
		int nx = x + fx[i];
		int ny = y+ fy[i];
		if(nx >= 1 && nx<=m && ny >= 1 && ny <= m && !bj[nx][ny]){
			if(qp[nx][ny] == qp[x][y]){
				dfs(nx, ny, jb);
			}
			else if(qp[nx][ny] == 0 && !gb[x][y]){
				qp[nx][ny] = qp[x][y];
				gb[nx][ny] = true;				
				dfs(nx, ny, jb+2);
				qp[nx][ny] = 0;
				gb[nx][ny] = false;
			}
			else if(qp[nx][ny] != 0){
				dfs(nx, ny, jb+1);
			}
		}
	}
	bj[x][y] = false;
}
int main() {
	
	cin >> m >> n;
	for(int i=1, x, y, c;i<=n;i++){
		cin >> x >> y >>c;
		if(c == 0){
			qp[x][y] = 2;
		}else qp[x][y] = c;
	}
	dfs(1,1,0);
	if(zx == 20000) printf("-1");
	else printf("%d", zx);
	return 0;
}
2024/8/3 09:12
加载中...