求条(debug必关)
查看原帖
求条(debug必关)
1243618
Jokersheng楼主2024/12/29 11:18
#include <bits/stdc++.h>
using namespace std;

int m,n,x,y,c;

int a[105][105],bx[12]={1,-1,0,0,2,0,-2,0,1,1,-1,-1},by[12]={0,0,-1,1,0,2,0,-2,-1,1,-1,1};

int vis[105][105],jb[105][105];

bool t=0,f=0;

int ans=0,tx,ty;

queue <int> p,q;

void bfs(){
	p.push(1);
	q.push(1);
	while(!p.empty()){
		tx=p.front();
		ty=q.front();
		if(tx==m&&ty==m){
			f=1;
			return;
		}
		for(int i=0;i<4;i++){
			if(a[tx][ty]==a[tx+bx[i]][ty+by[i]]&&vis[tx+bx[i]][ty+by[i]]==0){
				vis[tx+bx[i]][ty+by[i]]=1;
				jb[tx+bx[i]][ty+by[i]]=jb[tx][ty];
				p.push(tx+bx[i]);
				q.push(ty+by[i]);
			}
		}
		for(int i=0;i<4;i++){
			if(a[tx][ty]!=a[tx+bx[i]][ty+by[i]]&&a[tx+bx[i]][ty+by[i]]!=0&&vis[tx+bx[i]][ty+by[i]]==0){
				vis[tx+bx[i]][ty+by[i]]=1;
				jb[tx+bx[i]][ty+by[i]]=jb[tx][ty]+1;
				p.push(tx+bx[i]);
				q.push(ty+by[i]);
			}
		}
		for(int i=4;i<8;i++){
			if(a[tx][ty]==a[tx+bx[i]][ty+by[i]]&&vis[tx+bx[i]][ty+by[i]]==0){
				vis[tx+bx[i]][ty+by[i]]=1;
				if(jb[tx+bx[i]][ty+by[i]]!=0)jb[tx+bx[i]][ty+by[i]]=min(jb[tx+bx[i]][ty+by[i]],jb[tx][ty]+2);
				else jb[tx+bx[i]][ty+by[i]]=jb[tx][ty]+2;
				p.push(tx+bx[i]);
				q.push(ty+by[i]);
			}
		}
		for(int i=4;i<8;i++){
			if(a[tx][ty]!=a[tx+bx[i]][ty+by[i]]&&a[tx+bx[i]][ty+by[i]]!=0&&vis[tx+bx[i]][ty+by[i]]==0){
				vis[tx+bx[i]][ty+by[i]]=1;
				if(jb[tx+bx[i]][ty+by[i]]!=0)jb[tx+bx[i]][ty+by[i]]=min(jb[tx+bx[i]][ty+by[i]],jb[tx][ty]+3);
				else jb[tx+bx[i]][ty+by[i]]=jb[tx][ty]+3;
				p.push(tx+bx[i]);
				q.push(ty+by[i]);
			}
		}
		for(int i=8;i<12;i++){
			if(a[tx][ty]==a[tx+bx[i]][ty+by[i]]&&vis[tx+bx[i]][ty+by[i]]==0){
				vis[tx+bx[i]][ty+by[i]]=1;
				if(jb[tx+bx[i]][ty+by[i]]!=0)jb[tx+bx[i]][ty+by[i]]=min(jb[tx+bx[i]][ty+by[i]],jb[tx][ty]+2);
				else jb[tx+bx[i]][ty+by[i]]=jb[tx][ty]+2;
				p.push(tx+bx[i]);
				q.push(ty+by[i]);
			}
		}
		for(int i=8;i<12;i++){
			if(a[tx][ty]!=a[tx+bx[i]][ty+by[i]]&&a[tx+bx[i]][ty+by[i]]!=0&&vis[tx+bx[i]][ty+by[i]]==0){
				vis[tx+bx[i]][ty+by[i]]=1;
				if(jb[tx+bx[i]][ty+by[i]]!=0)jb[tx+bx[i]][ty+by[i]]=min(jb[tx+bx[i]][ty+by[i]],jb[tx][ty]+3);
				else jb[tx+bx[i]][ty+by[i]]=jb[tx][ty]+3;
				p.push(tx+bx[i]);
				q.push(ty+by[i]);
			}
		}
		p.pop();
		q.pop();
	}
	cout<<-1;
	return;
}

int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		cin>>x>>y>>c;
		a[x][y]=c+1;
	}
	bfs();
	cout<<jb[m][m]<<endl;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			cout<<jb[i][j]<<" ";
		}
		cout<<endl;
	}
	

	return 0;
}
2024/12/29 11:18
加载中...