社区讨论

蒟蒻求助70分

P3956[NOIP 2017 普及组] 棋盘参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo8ix2jl
此快照首次捕获于
2023/10/27 19:22
2 年前
此快照最后确认于
2023/10/27 19:22
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=105;
const int tag[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,m,i,x,y,c,z,xx,yy,f[N][N],a[N][N],v[N][N][10];
queue<int> qx,qy,qz;
signed main(){
//	srand(114514666);
	cin>>n>>m;
	for(i=1;i<=m;i++){
		cin>>x>>y>>c;
		a[x][y]=c+1;
	}
	memset(f,125,sizeof(f));
	qx.push(1);qy.push(1);f[1][1]=0;qz.push(4);
	while(!qx.empty()){
		x=qx.front();y=qy.front();z=qz.front();
		qx.pop();qy.pop();qz.pop();
		for(i=0;i<4;i++){
			xx=x+tag[i][0];yy=y+tag[i][1];
			if(xx<1||yy<1||xx>n||yy>n)continue;
			if(a[xx][yy]+a[x][y]==0)continue;
			if(a[xx][yy]==a[x][y]&&f[xx][yy]>f[x][y]){
				qx.push(xx);qy.push(yy);qz.push(z);
				f[xx][yy]=f[x][y];
			}
			if(a[xx][yy]!=a[x][y]&&a[x][y]&&a[xx][yy]){
				if(f[xx][yy]>f[x][y]+1){
					qx.push(xx);qy.push(yy);qz.push(z);
					f[xx][yy]=f[x][y]+1;
				}
			}
			if(a[xx][yy]!=a[x][y]&&a[xx][yy]&&!a[x][y]){
				if(a[xx][yy]==z&&f[xx][yy]>f[x][y]){
					qx.push(xx);qy.push(yy);qz.push(4);
					f[xx][yy]=f[x][y];
				}
				if(a[xx][yy]!=z&&f[xx][yy]>f[x][y]+1){
					qx.push(xx);qy.push(yy);qz.push(4);
					f[xx][yy]=f[x][y]+1;
				}
			}
			if(a[xx][yy]!=a[x][y]&&a[x][y]&&!a[xx][yy]){
				if(f[xx][yy]>f[x][y]+2){
					qx.push(xx);qy.push(yy);qz.push(a[x][y]);
					f[xx][yy]=f[x][y]+2;
				}
			}
		}
	}
	if(f[n][n]==f[0][0])cout<<-1;
	else cout<<f[n][n];
	return 0;
}
错的几个点是因为答案少 1,有大佬知道原因吗?

回复

2 条回复,欢迎继续交流。

正在加载回复...