社区讨论
蒟蒻求助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 条回复,欢迎继续交流。
正在加载回复...