社区讨论
#1AC #17AC 其他WA 10分求条 bfs
P3956[NOIP 2017 普及组] 棋盘参与者 4已保存回复 20
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 20 条
- 当前快照
- 1 份
- 快照标识符
- @mhizn13n
- 此快照首次捕获于
- 2025/11/03 18:19 4 个月前
- 此快照最后确认于
- 2025/11/03 19:33 4 个月前
求条
CPP#include <bits/stdc++.h>
using namespace std;
const int N=110,dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
int c[N][N],vis[N][N][2],i,n,m,x,y,color;
queue <pair<pair<int,int>,int> > q;
void bfs(){
int fx,fy,fb,i,sx,sy,ccc;
while(!q.empty()){
fx=q.front().first.first;fy=q.front().first.second;fb=q.front().second;q.pop();
if(fx==m&&fy==m){cout<<vis[fx][fy][fb];exit(0);}
for(i=0;i<4;i++){
sx=fx+dx[i];sy=fy+dy[i];
if(sx<1||sx>m||sy<1||sy>m) continue;
if(c[sx][sy]>=0){
ccc=vis[fx][fy][fb]+(c[fx][fy]==c[sx][sy]?0:1);
if(vis[sx][sy][0]==-1||vis[sx][sy][0]>ccc)
vis[sx][sy][0]=ccc,q.push({{sx,sy},0});
}else if(c[sx][sy]==-2&&fb==0){
ccc=vis[fx][fy][fb]+2;
if(vis[sx][sy][1]==-1||vis[sx][sy][1]>ccc)
vis[sx][sy][1]=ccc,q.push({{sx,sy},1});
}
}
}
}
int main(){
memset(c,-2,sizeof(c));memset(vis,-1,sizeof(vis));
q.push({{1,1},0});vis[1][1][0]=0;
cin>>m>>n;
for(i=1;i<=n;i++) cin>>x>>y>>color,c[x][y]=color;
bfs();
cout<<-1;
}
ccc 是原始节点到新节点的路回复
共 20 条回复,欢迎继续交流。
正在加载回复...