代码求调
查看原帖
代码求调
873417
Istruggle楼主2023/8/7 12:07

哪里出问题了

#include<bits/stdc++.h>
using namespace std;
int m,n,ma[105][105],vis[105][105];
int ans=-1;
int net[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
struct node{
	int x,y,dis,is_ch;/*是否变了颜色* 0:未变 1:改变*/
	int col/*颜色*/;
};
int bfs()
{
	queue<node> q;
	q.push((node){1,1,0,0,ma[1][1]});
	vis[1][1]=1;
	while(!q.empty()){
		node u=q.front();
		q.pop();
		vis[u.x][u.y]=1;
		for(int i =0;i<4;i++){
			int nx=u.x+net[i][0];
			int ny=u.y+net[i][1];
			if(nx==m&&ny==m){
				if(ma[nx][ny]==u.col&&ma[nx][ny]!=0) return u.dis;
				if((ma[nx][ny]==1&&u.col==2)||(ma[nx][ny]==2&&u.col==1)) return u.dis+1;
				if(ma[nx][ny]==0&&u.is_ch==0) return u.dis+2;
			}
			if(nx<=m&&nx>=1&&ny<=m&&ny>=1&&vis[nx][ny]==0){
				if(ma[nx][ny]==u.col){
					q.push((node){nx,ny,u.dis,0,ma[nx][ny]});
				}
				if((ma[nx][ny]==1&&u.col==2)||(ma[nx][ny]==2&&u.col==1)){
					q.push((node){nx,ny,u.dis+1,0,ma[nx][ny]});
				}
				if(ma[nx][ny]==0&&u.is_ch==0) q.push((node){nx,ny,u.dis+2,1,ma[u.x][u.y]});
			}
		}
		
	}
}
int main()
{
	memset(vis,0,sizeof(vis)); 
	memset(ma,0,sizeof(ma));
	scanf("%d%d",&m,&n);
	for(int i = 1;i<=n;i++){
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		ma[a][b]=c+1;  //1:红 2:黄 0:无色 
	}
	int ans=bfs();
	cout<<ans;
	return 0;
}
2023/8/7 12:07
加载中...