这能过?
查看原帖
这能过?
1463377
mmmkkk111楼主2024/12/31 20:04
#include<bits/stdc++.h>
using namespace std;
struct node{int x;int y;int t;};
queue<node>q;int h[1010][1010],n;bool vis[1010][1010];
int bfs(){
while(!q.empty()){
node c=q.front();
q.pop();
if(c.x==n-1&&c.y==n-1)return c.t;
int mark=h[c.x][c.y];
for(int i=c.y+1;i<=n-1;i++){
    if(mark>h[c.x][i]){vis[c.x][i]=1;q.push({c.x,i,c.t+1});mark=h[c.x][i];}
    else break;
}
mark=h[c.x][c.y];
for(int i=c.y-1;i>=0;i--){
    if(mark>h[c.x][i]){vis[c.x][i]=1;q.push({c.x,i,c.t+1});mark=h[c.x][i];}
    else break;
}
if(c.x<n-1&&!vis[c.x+1][c.y]){q.push({c.x+1,c.y,c.t+1});vis[c.x+1][c.y]=1;}
if(c.y<n-1&&!vis[c.x][c.y+1]){q.push({c.x,c.y+1,c.t+1});vis[c.x][c.y+1]=1;}
}
return 0;
}
int main(){
cin>>n;
for(int i=0;i<=n-1;i++){
for(int j=0;j<=n-1;j++){
cin>>h[i][j];
}
}
memset(vis,0,sizeof(vis));
vis[0][0]=1;
q.push({0,0,0});
cout<<bfs();
return 0;    
}

本想先暴力试一下,这都O(n^3)了

2024/12/31 20:04
加载中...