第二次求助,这次用bfs写的,结果样例数据都过不了
查看原帖
第二次求助,这次用bfs写的,结果样例数据都过不了
682044
czk111楼主2022/8/19 11:47
#include <bits/stdc++.h>
using namespace std;
int a[10000][10000];
bool vis[10000][10000];
struct node{
	int x;
	int y;
	int con;
	int s;
	bool f;
};
int n,m,x,y,c;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
queue<node> q;
int main(){
	cin>>m>>n;
	memset(a,-1,sizeof(a));
	for(int i=1;i<=n;i++){
		cin>>x>>y>>c;
		a[x][y]=c;
	}
	node start;
	start.x=1;
	start.y=1;
	start.con=0;
	start.f=true;
	q.push(start);
	vis[1][1]=true;
	int flag=1;
	while(!q.empty()){
		int x=q.front().x;int y=q.front().y;
		if(x==m&&y==m){
			cout<<q.front().con;
			flag=0;
			break;
		}
		for(int i=0;i<4;i++){
			int tx=x+dx[i];
			int ty=y+dy[i];
			if(tx<0||ty<0||tx>m||ty>m||vis[tx][ty]==true||a[tx][ty]==-1&&q.front().f==false){
				continue;
			}else if(a[tx][ty]==-1&&q.front().f==true){
				node g;
				g.x=tx;
				g.y=ty;
				g.con=g.con+2;
				g.s=a[x][y];
				g.f=false;
				q.push(g);
			}else if(q.front().s!=a[tx][ty]){
				node g;
				g.x=tx;
				g.y=ty;
				g.con=g.con+1;
				g.s=a[x][y];
				g.f=true;
				q.push(g);				
			}else{
				node g;
				g.x=tx;
				g.y=ty;
				g.con=g.con;
				g.s=a[x][y];
				g.f=true;
				q.push(g);					
			}
		}
		q.pop();
	}
	if(flag){
		cout<<-1;
	}
}

看来还是我太蒻了

2022/8/19 11:47
加载中...