55ptsWA求调,玄1关
查看原帖
55ptsWA求调,玄1关
369428
xCLplr楼主2024/8/25 19:24
#include <bits/stdc++.h>
using namespace std;
int m,n,qmap[1010][1010];
int dx[5]= {0,0,0,1,-1},dy[5]= {0,1,-1,0,0},minx=0x7f,cost[1010][1010];
bool vis[1010][1010];
void dfs(int x,int y,int c,int now) {
	if(x==m&&y==m) {
		minx=min(c,minx);
		return;
	}
	for(int i=1; i<=4; i++) {
		int nx=x+dx[i],ny=y+dy[i];
		if(nx<=m&&nx>=1&&ny<=m&&ny>=1&&!vis[nx][ny]&&(qmap[x][y]||qmap[nx][ny])) {
			if(qmap[nx][ny]==0&&c+2<cost[nx][ny]) {
				vis[nx][ny]=1;
				cost[nx][ny]=c+2;
				dfs(nx,ny,c+2,now);
				vis[nx][ny]=0;
			}
			else if((now==qmap[nx][ny])&&(c<cost[nx][ny])) {
				vis[nx][ny]=1;
				cost[nx][ny]=c;
				dfs(nx,ny,c,now);
				vis[nx][ny]=0;
			}
			else if((c+1<minx)&&(c+1<cost[nx][ny])) {
				vis[nx][ny]=1;
				cost[nx][ny]=c+1;
				dfs(nx,ny,c+1,qmap[nx][ny]);
				vis[nx][ny]=0;
			}
		}
	}
	return;
}
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>m>>n;
	memset(cost,0x7f,sizeof(cost));
	for(int i=1; i<=n; i++) {
		int x,y,c;
		cin>>x>>y>>c;
		qmap[x][y]=c+1;
	}
	vis[1][1]=1;
	dfs(1,1,0,qmap[1][1]);
	if(minx==0x7f) cout<<"-1";
	else cout<<minx;
	return 0;
}
2024/8/25 19:24
加载中...