社区讨论

#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 条回复,欢迎继续交流。

正在加载回复...