爆零求调
查看原帖
爆零求调
1030305
Scaramouche114514楼主2025/7/21 11:40
#include<bits/stdc++.h>
using namespace std;
int n,a[1005][1005],book[1005][1005],h=1,t;
struct node{
	int x,y,step;
}q[1000005];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	book[1][1]=1;
	q[++t]={1,1,0};
	while(h<=t){
		node tmp=q[h];
		h++;
		if(tmp.x==n&&tmp.y==n){
			cout<<tmp.step+1;
			return 0;
		}
		for(int i=1;i<=n;i++){
			int xx=tmp.x,xy=tmp.y+i;
			if(xy<=n&&a[tmp.x][tmp.y]>a[xx][xy]){
				if(book[xx][xy]) continue;
				book[xx][xy]=1;
				q[++t]={xx,xy,tmp.step+1};
			}
			else break;
		}
		for(int i=1;i<=n;i++){
			int xx=tmp.x,xy=tmp.y-i;
			if(xy>=1&&a[tmp.x][tmp.y]>a[xx][xy]){
				if(book[xx][xy]) continue;
				book[xx][xy]=1;
				q[++t]={xx,xy,tmp.step+1};
			}
			else break;
		}
		int xx=tmp.x+1,xy=tmp.y;
		if(xx<=n&&!book[xx][xy]){
			book[xx][xy]=1;
			q[++t]={xx,xy,tmp.step+1};
		}
		xx=tmp.x,xy=tmp.y+1;
		if(xy<=n&&!book[xx][xy]){
			book[xx][xy]=1;
			q[++t]={xx,xy,tmp.step+1};
		}
	}
	return 0;
}
2025/7/21 11:40
加载中...