罗勇军 →《算法竞赛·快冲300题》每日一题:“游泳” ← DFS+剪枝

这篇具有很好参考价值的文章主要介绍了罗勇军 →《算法竞赛·快冲300题》每日一题:“游泳” ← DFS+剪枝。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【题目来源】
http://oj.ecustacm.cn/problem.php?id=1753
http://oj.ecustacm.cn/viewnews.php?id=1023

【题目描述】
游泳池可以等分为n行n列的小区域,每个区域的温度不同。
小明现在在要从游泳池的左上角(1, 1)游到右下角(n, n),小明只能向上下左右四个方向游,不能游出泳池。
而小明对温度十分敏感,他希望你帮他找一条最舒适的路径,使路径上的
最高的水温和最低的水温差值最小。

【输入格式】
第一行输入一个正整数n。
接下来n行,每行n个正整数,表示方阵每个区域的温度a[i][j]。
所有数据保证随机。
(1≤n≤100,1≤a[i][j]≤1000)

【输入格式】
一行一个数表示最小差值。

【输入样例】
4
1 3 10 8
1 4 10 8
1 1 1 1
1 5 8 8

【输出样例】
7

【算法分析】
由于本题规定小明可以往上下左右四个方向游,也就是说可以走回头路,所以不能用动态规划。故依据本题题意,若要找一条最舒适的路径的话,就需要用搜索算法了。
但是,如果简单地遍历出所有路径,再比较得到温差最小路径,肯定超时,必须
剪枝才能减少路径的搜索数量。
如何剪枝?这是本题难点。因为,如果已知最小温差,只需一边游一边检查当前路径上的最大温差,如果已经超过了允许的最小温差,就不用走下去了。但是,
最小温差不能预知,只能猜。最好的方法是使用二分法来猜这个最小温差。本题的解法是“DFS+二分法”。 用“BFS+二分法”也行,请大家思考。

【算法代码】

#include<bits/stdc++.h>
using namespace std;

const int TOP=1000;
const int maxn=105;
int a[maxn][maxn]; //temperature
bool st[maxn][maxn];
int n;
int dx[4]= {-1,0,1,0};
int dy[4]= {0,1,0,-1};

void dfs(int x,int y,int maxt,int mint) {
    if(a[x][y]>maxt || a[x][y]<mint) return; //prune
    st[x][y]=true;
    for(int i=0; i<4; i++) {
        int nx=x+dx[i];
        int ny=y+dy[i];
        if(!st[nx][ny] && nx>=1 && nx<=n && ny>=1 && ny<=n)
            dfs(nx,ny,maxt,mint);
    }
}

bool check(int x) {
    for(int i=1; i+x<=TOP; i++) {
        memset(st,0,sizeof(st));
        dfs(1,1,i+x,i);
        if(st[n][n]) return 1;
    }
    return 0;
}

int main() {
    scanf("%d",&n);
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=n; j++) {
            scanf("%d",&a[i][j]);
        }
    }

    int le=1,ri=TOP;
    while(le<=ri) {
        int mid=(le+ri)/2;
        if(check(mid)) ri=mid-1;
        else le=mid+1;
    }
    printf("%d",ri+1);

    return 0;
}


/*
in:
4
1 3 10 8
1 4 10 8
1 1 1 1
1 5 8 8

out:
7
*/





【参考文献】
https://blog.csdn.net/weixin_43914593/article/details/131912564


 文章来源地址https://www.toymoban.com/news/detail-693288.html

到了这里,关于罗勇军 →《算法竞赛·快冲300题》每日一题:“游泳” ← DFS+剪枝的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《算法竞赛·快冲300题》每日一题:“糖果配对”

    《 算法竞赛·快冲300题 》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C++、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 “ 糖果配对 ” ,链接: http://oj.ecustacm.cn/problem.php?id=1735 【题目描述】 现在有N个小朋

    2024年02月12日
    浏览(45)
  • 《算法竞赛·快冲300题》每日一题:“超级骑士”

    《 算法竞赛·快冲300题 》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C++、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 “ 超级骑士 ” ,链接: http://oj.ecustacm.cn/problem.php?id=1810 【题目描述】 现在在一个无

    2024年02月17日
    浏览(51)
  • 《算法竞赛·快冲300题》每日一题:“彩虹数”

    《 算法竞赛·快冲300题 》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C++、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 “ 彩虹数 ” ,链接: http://oj.ecustacm.cn/problem.php?id=1840 【题目描述】 彩虹数:一个无

    2024年02月09日
    浏览(48)
  • 《算法竞赛·快冲300题》每日一题:“凑二十四”

    《 算法竞赛·快冲300题 》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C++、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 “ 凑二十四 ” ,链接: http://oj.ecustacm.cn/problem.php?id=1793 【题目描述】 给你n个数字,

    2024年02月11日
    浏览(37)
  • 《算法竞赛·快冲300题》每日一题:“松鼠与栗子”

    《 算法竞赛·快冲300题 》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C++、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 “ 松鼠与栗子 ” ,链接: http://oj.ecustacm.cn/problem.php?id=1852 【题目描述】 现在有m棵栗

    2024年02月11日
    浏览(43)
  • 【每日一题Day245】面试题 16.19. 水域大小 | dfs

    你有一个用于表示一片土地的整数矩阵 land ,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。 dfs感染

    2024年02月10日
    浏览(50)
  • 【每日一题Day222】LC1110删点成林 | dfs后序

    给出二叉树的根节点 root ,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序组织答案。 又是一段瓶颈期 2023/5/30 思路 遍历树时,如果

    2024年02月07日
    浏览(68)
  • 【每日一题Day244】LCP 41. 黑白翻转棋 bfs dfs

    LCP 41. 黑白翻转棋 在 n*m 大小的棋盘中,有黑白两种棋子,黑棋记作字母 \\\"X\\\" , 白棋记作字母 \\\"O\\\" ,空余位置记作 \\\".\\\" 。当落下的棋子与其他相同颜色的棋子在行、列或对角线完全包围(中间不存在空白位置)另一种颜色的棋子,则可以翻转这些棋子的颜色。 思路 枚举棋盘中每

    2024年02月09日
    浏览(53)
  • 蓝桥杯算法竞赛系列第五章——拔高篇之深度优先搜索(DFS)

    欢迎回到:遇见蓝桥遇见你,不负代码不负卿!  目录 一、引入:深度优先搜索(DFS)  二、经典例题 例题1.二叉搜索树的范围和 题目描述 题解 代码执行 例题2.岛屿数量  题目描述 题解 代码执行 例题3.背包问题 题目描述 题解 代码执行 三、思考题 四、蓝桥结语:遇见蓝

    2023年04月09日
    浏览(47)
  • 算法|每日一题|H 指数|二分

    原题地址: 力扣每日一题:H 指数 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且每

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包