2721 滑雪场的高度差

此题 二分+搜索

二分

while(l < r){
    int mid + (l + r) / 2;
    if (check(mid))
        r = mid;
    else
        l = mid + 1;
}
return r;

搜索

至于搜索,优选bfs(节省时间)。在合法情况下搜索一次(起点下文解释),存哪些网格经历过,最后再判断是否经过了所有关键网格。起点最先想到的肯定是从每一个关键网格出发,看看从它开始搜索,在合法情况下是否能经过所有关键网格(输入时可以用结构体,存下每一个关键网格的坐标,关键网格的数量)。但试想,从任意一个关键网格出发,如果它能经过所有关键网格,这个mid就是可以采用的呢?因为假如从某一关键网格(x,y)出发,它通过某一路径经过一个关键网格(m,n),那么从(m,n)出发也一定能通过这个路径,以现在的mid经过(x,y)。所以假如(x,y)能经过所有的关键网格,那么(m,n)也一定能经过所有的关键网格(它先沿某一路径到达(x,y))。所以只用从任意一个关键网格开始搜索,再判断。如果它经过了所有关键网格,check()返回true,不然返回false

至于bfs代码,无聊时再补上

猜你喜欢

转载自blog.csdn.net/weixin_44025325/article/details/85260942