旅途

题目:

 

 

 

 这一题是典型的BFS模板题只有几点需要注意:

1.要靠小根堆顶替栈这样才能最优

2.要想到BFS,乍一看给人DFS的感觉但DFS会超,所以用BFS

3.因为这里有x,y值,所以要开struct 小根堆+结构体?总结如下:

struct point{
    int x,y,a;
};
struct cmp1{
    int operator() (point x,point y) const
    {
        return x.a>y.a;
    }
};
priority_queue<point,vector<point>,cmp1> q;

4.最后要注意什么初始化之类的。

当然了,因为老师是照-J难度出的所以也可以不用小根堆

再看看题目:

 

 使最大值最小,使最小值最大是二分的代表所以也可以用二分来解,也算是正解。

就浅说一下二分的思路吧:

总体:二分答案 + 搜索。
先二分路径上的最大值,然后再从 (1, 1) 开始搜索,只走小于等于该二分值的
点,然后判断能否走到 (n, m) 即可。

程序:

#include<bits/stdc++.h>
using namespace std;
const int N=530;
int n,m,a[N][N]={0},vis[N][N]={0},d[10][10]={{1,0},{0,1},{-1,0},{0,-1}},b[N][N]={0},ans=0;
struct point{
    int x,y,a;
};
struct cmp1{
    int operator() (point x,point y) const
    {
        return x.a>y.a;
    }
};
priority_queue<point,vector<point>,cmp1> q;
void bfs()
{
    while(q.size())
    {
        point op=q.top();
        ans=max(ans,a[op.x][op.y]);
        q.pop();
        if(op.x==n&&op.y==m)
        {
            return;
        }
        for(int i=0;i<4;i++)
        {
            point np;
            np.x=op.x+d[i][0];
            np.y=op.y+d[i][1];
            np.a=a[np.x][np.y];
            if(np.x<=n&&np.x>=1&&np.y>=1&&np.y<=m&&vis[np.x][np.y]==0)
            {
                vis[np.x][np.y]=1;
                
//                a[np.x][np.y]+=a[op.x][op.y];
                q.push(np);
                
            }
            
        }
//        cout<<"a: "<<op.a<<" x: "<<op.x<<" y: "<<op.y<<endl;
    }
}
int main()
{
     freopen( "travel.in", "r", stdin );
     freopen( "travel.out", "w", stdout );
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&a[i][j]);
            b[i][j]=a[i][j];
        }
    }
    vis[1][1]=1;
    point t;
    t.x=1;
    t.y=1;
    t.a=a[1][1];
    ans=a[1][1];
    q.push(t);
    bfs();
//    cout<<a[n][m];
//    for(int i=1;i<=n;i++)
//    {
//        for(int j=1;j<=m;j++) cout<<a[i][j]<<" ";
//        cout<<endl;
//    } 
    cout<<ans;
    return 0;
}

 

posted @ 2022-10-04 19:12  王浩泽  阅读(31)  评论(0编辑  收藏  举报