25分求助p3956
  • 板块题目总版
  • 楼主czk111
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/1/16 20:35
  • 上次更新2023/10/24 03:56:17
查看原帖
25分求助p3956
682044
czk111楼主2023/1/16 20:35
#include <bits/stdc++.h>
using namespace std;
struct node{
	int x,y,c,f;
}q[1000];
int a[1000][1000],n,m,minn=0xffffff;
int xx[4]={-1,1,0,0};
int yy[4]={0,0,1,-1};
bool vis[1000][1000];
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		int e,b,c;
		cin>>e>>b>>c;
		a[e][b]=c+1;
	}
	q[0].x=1;
	q[0].y=1;
	q[0].c=a[1][1];
	q[0].f=0;
	int front=0,rear=0;
	while(front<=rear){
		if(q[front].f>=minn){
			front++;
			continue;
		}
		if(q[front].x==m&&q[front].y==m){
			minn=min(q[front].f,minn);
			front++;
			continue;
		}
		for(int i=0;i<4;i++){
			int tx=q[front].x+xx[i];
			int ty=q[front].y+yy[i];
			if(tx<=0||tx>m||ty<=0||ty>m||vis[tx][ty]==true)continue;
			if(a[tx][ty]==q[front].c&&a[tx][ty]!=0){
				rear++;
				q[rear].f=q[front].f;
				q[rear].x=tx;
				q[rear].y=ty;
				q[rear].c=a[tx][ty];
				vis[tx][ty]=true;
			}else if(a[tx][ty]!=0){
				rear++;
				q[rear].f=q[front].f+1;
				q[rear].x=tx;
				q[rear].y=ty;
				q[rear].c=a[tx][ty];
				vis[tx][ty]=true;
			}else if(a[q[front].x][q[front].y]!=0){
				rear++;
				q[rear].f=q[front].f+2;
				q[rear].x=tx;
				q[rear].y=ty;
				q[rear].c=a[tx][ty];
				vis[tx][ty]=true;
			}
		}
		front++;
	}
	if(minn==0xffffff)cout<<-1;
	else cout<<minn;
}
2023/1/16 20:35
加载中...