社区讨论
40分,求调
P3956[NOIP 2017 普及组] 棋盘参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhjiivi8
- 此快照首次捕获于
- 2025/11/04 03:08 4 个月前
- 此快照最后确认于
- 2025/11/04 03:08 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,c,a[110][110],f[110][110],ax[4]= {0,1,0,-1},ay[4]= {1,0,-1,0},h,t=1,nx,ny,nc;
bool b[110][110],bb[110][110];
struct node {
int xx,yy,tt,co;
} q[4000100];
int main() {
memset(f,127,sizeof(f));
cin>>m>>n;
for(int i=1; i<=m; i++) {
for(int j=1; j<=m; j++) {
a[i][j]=3;
}
}
for(int i=1; i<=n; i++) {
cin>>x>>y>>c;
a[x][y]=c;
}
q[1].xx=1,q[1].yy=1,q[1].tt=0,q[1].co=a[1][1],b[1][1]=1,f[1][1]=0;
while(h<t) {
++h;
for(int i=0; i<4; i++) {
nx=q[h].xx+ax[i],ny=q[h].yy+ay[i],nc=a[nx][ny];
if(bb[q[h].xx][q[h].yy]) {
if(nc==3) {
continue;
}
}
if(!b[nx][ny]&&nx>0&&ny>0&&nx<=m&&ny<=m) {
b[nx][ny]=1;
++t;
if(nc==3) {
if(q[h].tt+2<f[nx][ny]) {
bb[nx][ny]=1;
q[t].xx=nx,q[t].yy=ny,q[t].tt=q[h].tt+2,q[t].co=q[h].co,f[nx][ny]=q[t].tt;
}
} else {
q[t].xx=nx,q[t].yy=ny,q[t].co=nc;
if(nc!=q[h].co) {
if(q[h].tt+1<f[nx][ny])
q[t].tt=q[h].tt+1,f[nx][ny]=q[t].tt;
} else {
if(q[h].tt<f[nx][ny])
q[t].tt=q[h].tt,f[nx][ny]=q[t].tt;
}
}
}
}
}
if(f[m][m]==f[0][0])cout<<-1;
else cout<<f[m][m];
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...