题目描述 Description

小浣熊松松和朋友到野外露营,没想到遇上了π年一次的大洪水,好在松松是一只爱观察的小浣熊,他发现露营地的地形和洪水有如下性质:

①露营地可以被看做是一个N*M的矩形方阵,其中左上角坐标为(1,1),右下角坐标为(n,m),每个格子(i,j)都有一个高度h(i,j)。

②洪水送(r,c)开始,如果一个格子被洪水淹没,那这个格子四周比它低(或相同)的格子也会被淹没。

现在松松想请你帮忙算算,有多少个格子不会被淹没,便于他和朋友逃脱。

【原有误数据已删除】

输入描述 Input Description

第一行包含两个整数n,m,表示矩形方阵右下角坐标。

以下n行,每行m个数,第i行第j个数表示格子(i,j)的高度。

最后一行包含两个整数r,c,表示最初被洪水淹没的格子。

输出描述 Output Description

输出仅一行,为永远不会被淹没的格子的数量。

样例输入 Sample Input

3 3

1 2 3

2 3 4

3 4 5

2 2

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

对于90%的数据,保证随机生成。

对于100%的数据,1<=N,M<=1000。

标签是bfs,

我只会用dfs。

下面是dfs爆搜。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;int n,m,h[1002][1002],a,b,ans=1;
int xx[5]={-1,1,0,0},yy[5]={0,0,1,-1};
bool w[1002][1002],vis[1002][1002];void dfs(int x,int y)
{vis[x][y]=1;for(int i=0;i<4;++i){int dx=x+xx[i],dy=y+yy[i];if(dx<1||dx>n||dy<1||dy>m||w[dx][dy]==1||vis[dx][dy]==1) continue;if(h[dx][dy]<=h[x][y]){w[dx][dy]=1;ans++;}}for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)if(w[i][j]==1&&!vis[i][j]) dfs(i,j);
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)scanf("%d",&h[i][j]);scanf("%d%d",&a,&b);w[a][b]=1;dfs(a,b);printf("%d",n*m-ans);
}

DFS75

这个也是dfs,还是很慢,不过能过这道题,

对比一下思路吧。

#include<cstdio>
#include<iostream>
using namespace std;int next[4][2]= {{0,1},{0,-1},{1,0},{-1,0}};
int mp[1000][1000];
int a[1000][1000];
int n,m,sum=0;void dfs(int x,int y)
{sum++;int t;t=mp[x][y];int i,j;for(i=0; i<4; i++){int xx=x+next[i][0];int yy=y+next[i][1];if(xx<1||yy<1||xx>n||yy>m)continue ;if(mp[xx][yy]<=t&&a[xx][yy]==0){a[xx][yy]=1;dfs(xx,yy);}}
}int main()
{int i,j;cin>>n>>m;for(i=1; i<=n; i++)for(j=1; j<=m; j++)cin>>mp[i][j];int x;int y;cin>>x>>y;a[x][y]=1;dfs(x,y);cout<<n*m-sum<<endl;return 0;
}

dfs AC

有人说这是个bfs的板子。

hh,反正我不会。

狗子zxl又在外面发火了。。。

另附一份bfsAC代码。

自行理解。

#include<iostream>
#include<queue>
using namespace std;struct point
{int x,y;
};int dir[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};
int lock[1001][1001] = {0};
int a[1001][1001];
int n, m, sum=0;void BFS(int x, int y)
{queue <point> q;point now,  next;now.x = x,   now.y = y;q.push(now);lock[now.x][now.y] = -1;while(!q.empty()){now = q.front();for(int i=0; i<4; i++){next.x = now.x + dir[i][0];next.y = now.y + dir[i][1];if(next.x<=0||next.y<=0||next.x>n||next.y>m) //判断是否越界continue;if((a[next.x][next.y]<=a[now.x][now.y])&&lock[next.x][next.y]!=-1)//如果洪水可以淹没,且点没有访问过
            {q.push(next);  //该点入栈lock[next.x][next.y] = -1;}}q.pop();sum++;}
}int main()
{int p1, p2;cin>>n>>m;for(int i=1; i<=n; i++){for(int j=1; j<=m; j++)cin>>a[i][j];}cin>>p1>>p2;BFS(p1,p2);cout<<n*m-sum<<endl;return 0;
}

bfs

转载于:https://www.cnblogs.com/Mary-Sue/p/9163418.html

CODE[VS] 3411 洪水相关推荐

  1. pku 3411 Paid Roads DFS+灵活技巧卡节点访问次数

    http://poj.org/problem?id=3411 题意: 给出 n 个节点 m 条边,求从 1 到 n 的最小花费.有两种支付方式: 1> 预先在城市 Ci (必须先到过该城市)支付 ...

  2. poj 3411 1724

    题目:http://poj.org/problem?id=3411 题意:n 个城市,m 条路,每条路都有两种情况的费用,一种是 在 b 城市付费 r,一种是提前在 c 城市付费 p 元,问从 1 到 ...

  3. 【To Understand】程序员面试金典——番外篇之洪水

    程序员面试金典--番外篇之洪水 参考网址:https://www.nowcoder.com/profile/1917743/codeBookDetail?submissionId=12679910 S ...

  4. 洪水填充算法_区域填充算法和多边形填充的扫描线算法

    本文主要介绍几种区域填充算法,重点解释多边形的扫描线填充算法,最后实现了多边形填充算法,包括在附录文件中.在参考[5]中,作者详细介绍了一系列区域填充算法,可以查看相应网页.代码的下载地址为:http ...

  5. 示例填充图片_用示例解释洪水填充算法

    示例填充图片 什么是洪水填充? (What is Flood Fill?) Flood fill is an algorithm mainly used to determine a bounded ...

  6. DM error code 达梦数据库-错误代码 汇总

    CODE ERRINFO 100 空结果集 101 字符串截断 102 在集函数中计算NULL值 103 无效的表名 104 删除0行记录 105 插入0行记录 106 更新0行记录 107 跨语句游 ...

  7. Ubuntu使用笔记(Talk is cheap,show me the code.)

    目录 VirtualBox共享剪贴板和共享文件夹的实现 1.   从Ubuntu 22.04存储库安装VirtualBox安装扩展 2.  设置虚拟机(ubuntu18.04) 2.1   在虚拟机窗 ...

  8. ICMP flood(ICMP洪水攻击)

    最近在学习DDos相关知识,参考一些知识,做了摘要,供自己参考. 参考:http://blog.csdn.net/xlf13872135090/article/details/8059538 什么是I ...

  9. 题目地址(1488. 避免洪水泛滥)

    题目地址(1488. 避免洪水泛滥) https://leetcode.cn/problems/avoid-flood-in-the-city/ 题目描述 你的国家有无数个湖泊,所有湖泊一开始都是空的 ...

最新文章

  1. 用html怎么 显示直线,html怎么用鼠标画出一条直线,鼠标移动时候要能看到线条...
  2. linux虚拟机漏洞修复,linux幽灵漏洞检测和修复方法
  3. Delphi中比较两个对象是否一致及地址是否相同
  4. 不自由な放課後 + 正しいメイドの躾かた 汉化补丁
  5. 从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用Application Part动态加载控制器和视图...
  6. npoi 所有列调整为一页_别再浪费纸了,一张纸就能打印Word、Excel、PPT所有内容,真厉害...
  7. java中timer和timertask_使用Java中的Timer和TimerTask
  8. ASP.NET Core 2.1 源码学习之 Options[3]:IOptionsMonitor 【转】
  9. DDOS---低轨道离子炮具体使用
  10. 【硬件】PIC32单片机烧写器以及线序说明
  11. IT项目管理追踪表格
  12. 腾讯服务器鉴黄系统,腾讯云智能鉴黄系统
  13. 符号_网名特殊符号在线制作
  14. 怎么用计算机弹出soldout,关于sellout和soldout。
  15. Python seaborn 条形图
  16. BUG生命周期和管理
  17. 使用NetBeans进行J2ME开发(五):揭开游戏开发的神秘面纱
  18. Atracsys FusionTrack 500 光学测量系统
  19. docker portainer agent 安装
  20. 50条有趣的Python一行代码

热门文章

  1. Ubuntu14.04 x64系统设置Qt5.8桌面快捷方式
  2. [转]Java AIO学习
  3. ai人工智能收入_人工智能促进收入增长:使用ML推动更有价值的定价
  4. 网络协议分层及报文格式大全
  5. 买房应该少出首付,多贷款
  6. 农行发布年报,日赚5.3亿,人均薪酬23万!
  7. 老干妈如今做到这么大,为什么她就是没遇到竞敌?
  8. 朋友圈加粗字体数字_数字+符码:医院数码导视系统畅想起来
  9. date oracle 显示毫秒_Oracle date timestamp 毫秒 - 时间函数总结
  10. php-fpm 配置文件位置,php