BFS85分,调了一天了,快崩溃了,救救孩子吧qwq
查看原帖
BFS85分,调了一天了,快崩溃了,救救孩子吧qwq
993403
zhangchenxi666楼主2023/8/21 17:16
#include<bits/stdc++.h>
using namespace std;
int m,n,x,y,z;
int bx[]={1,-1,0,0};
int by[]={0,0,-1,1};
int mp[110][110],ans[110][110],mppx[110][110],mppy[110][110];
bool vis[110][110],flag[110][110];
void bfs(int sx,int sy){
	queue<pair<int,int> >q;
	int sum=0;
	memset(ans,0x3f,sizeof ans);
	ans[sx][sy]=0;
	q.push(make_pair(sx,sy));
	while(q.size()){
		int dx=q.front().first;
		int dy=q.front().second;
		q.pop();
		sum=ans[dx][dy];
		for(int i=0;i<4;i++){
			int nx=dx+bx[i],ny=dy+by[i];
			if(nx<1||nx>m||ny<1||ny>m)continue;
			if(mp[dx][dy]!=mp[nx][ny]){
				if(mp[nx][ny]==-1){
					if(sum+2<ans[nx][ny]){
						flag[nx][ny]=1;
						mppx[nx][ny]=dx;
						mppy[nx][ny]=dy;
						ans[nx][ny]=sum+2;
						q.push(make_pair(nx,ny));
						continue;
					}
				}else{
					if(flag[dx][dy]){	
							if(mp[mppx[dx][dy]][mppy[dx][dy]]!=mp[nx][ny]){	
								sum++;
							}
								if(ans[nx][ny]>sum){
									ans[nx][ny]=sum;
									q.push(make_pair(nx,ny));
									continue;
								}
					}else{
						if(ans[nx][ny]>sum+1){
							ans[nx][ny]=sum+1;
							q.push(make_pair(nx,ny));
							continue;
						}	
					}
				}
			}else {
				if(mp[nx][ny]!=-1&&mp[dx][dy]!=-1){
					if(ans[nx][ny]>sum){
						ans[nx][ny]=sum;
						q.push(make_pair(nx,ny));
						continue;
					}
				}
			}
		}
	}
}
int main(){
	cin>>m>>n;
	memset(mp,-1,sizeof mp);
	for(int i=1;i<=n;i++){
		cin>>x>>y>>z;
		mp[x][y]=z;
	}
	bfs(1,1);
//	for(int i=1;i<=m;i++){
//		for(int j=1;j<=m;j++)
//			if(ans[i][j]==1061109567)cout<<setw(3)<<0<<" ";else cout<<setw(3)<<ans[i][j]<<" ";
//		cout<<endl;
//	}
//	for(int i=1;i<=m;i++){
//		for(int j=1;j<=m;j++)
//			if(ans[i][j]==1061109567)cout<<setw(3)<<0<<" ";else cout<<setw(3)<<mp[i][j]<<" ";
//		cout<<endl;
//	}
	if(ans[m][m]!=1061109567)cout<<ans[m][m];
	else cout<<-1;
}
//2 3
//1 1 0
//1 2 0
//2 1 1
2023/8/21 17:16
加载中...