HUBUST-1143 泉水

2024-05-03 20:08
文章标签 1143 泉水 hubust

本文主要是介绍HUBUST-1143 泉水,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题:
传送门
题意:
给一个地图,一个泉眼,求泉眼附近所有可以到达的高度不大于泉眼的点的个数(包括泉眼本身)
思路:
bfs直接搜索,这里注意,一定要在for循环内把vis[nx, ny]置为1,要不然可能会出现重复的情况(如果(i, j)比泉眼低,(i-1, j)和(i, j-1)也都比泉眼低, 那么在u=(i-1, j)时,cnt++了,在u=(i, j-1)时,也进行了cnt++)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>using namespace std;
const int MAX = 1002;int mp[MAX][MAX];
int dr[4][2]={-1,0,1,0,0,1,0,-1};
int vis[MAX][MAX];
int n, m, p1, p2;
int cnt = 0;
struct node {int x, y;
};
queue<node> q;void bfs() {node nd;nd.x=p1;nd.y=p2;vis[p1][p2]=1;q.push(nd);while (!q.empty()) {node u = q.front();q.pop();for (int i=0;i<4;i++) {int nx=u.x+dr[i][0], ny=u.y+dr[i][1];if ((nx>=1&&nx<=n) && (ny>=1&&ny<=m) && !vis[nx][ny] && mp[nx][ny] <= mp[p1][p2]) {nd.x=nx;nd.y=ny;q.push(nd);vis[nx][ny]=1;cnt++;}}}
}
void init() {cnt=0;while (!q.empty()) {q.pop();}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)vis[i][j]=0;
}
int main()
{while (cin>>n>>m>>p1>>p2) {init();for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)cin>>mp[i][j];bfs();cout<<cnt+1<<endl;}return 0;
}

这篇关于HUBUST-1143 泉水的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957544

相关文章

Leetcode 1143. 最长公共子序列 记忆化搜索 优化 C++实现

Leetcode 1143. 最长公共子序列 问题:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。如果不存在公共子序列,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "ab

【数学 递推】 HDU 1143 Tri Tiling

链接:Lux 参考:HERE n为奇数肯定为0,n为偶数,每次都是加两列,我们把两列看为一列,如果这一列与前面分开就只有三种方法即3*a[n-2],如果这一列不与前面的分开,那么不可分解矩形都只有两种情况所以为2*(a[n-4]+a[n-6]+……a[0]) 化简即为a[n]=4*a[n-2]-a[n-4] 化简,我不会,就写了个原始的,也算是过了。。。 #i

代码随想录算法训练营四十三天|1143.最长公共子序列、1035.不相交的线、53.最大子序和、392.判断子序列

题目链接:1143. 最长公共子序列 - 力扣(LeetCode) 思路: 如果text1[i - 1] 与 text2[j - 1]相同,那么找到了一个公共元素,所以dp[i][j] = dp[i - 1][j - 1] + 1; 如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 t

第五十一天 | 1143.最长公共子序列

题目:1143.最长公共子序列718.最长重复子数组的区别是,子序列不要求连续,子数组要求连续。这一差异体现在dp数组含义和递推公式中,本题是子序列,那就要考虑上nums1[i - 1] != nums2[j - 1]的情况。 本道题与 1.dp数组含义:         dp[i][j]:本题是子序列,那么dp数组的含义是长度为[0, i - 1]的字符串text1与长度为[0, j - 1

hdu-1143-Tri Tiling

#include<iostream> using namespace std; int a[32]={0}; int main() {     int n,i;     a[0]=1;     a[2]=3;     for(i=4;i<32;i++)         a[i]=4*a[i-2]-a[i-4];     while(cin>>n&&n!=-1

nyoj-1143-数字游戏

数字游戏 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 1 描述 peter喜欢玩数字游戏,但数独这样的游戏对他来说太简单了,于是他准备玩一个难的游戏。游戏规则是在一个N*N的表格里填数,规则:对于每个输入的N,从左上角开始,总是以对角线为起点,先横着填,再竖着填。这里给了一些样例,请在样例中找到规律并把这个N*N的表格打印出来吧。  输

【算法刷题day53】Leetcode:1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

文章目录 Leetcode 1143. 最长公共子序列解题思路代码总结 Leetcode 1035. 不相交的线解题思路代码总结 Leetcode 53. 最大子数组和解题思路代码总结 草稿图网站 java的Deque Leetcode 1143. 最长公共子序列 题目:1143. 最长公共子序列 解析:[代码随想录解析](https://programmercarl.c

代码随想录算法训练营DAY51|C++动态规划Part12|1143.最长公共子序列、1035.不相交的线、53.最大子序列和

文章目录 1143.最长公共子序列思路CPP代码 1035.不相交的线53.最大子序列和思路CPP代码 1143.最长公共子序列 力扣题目链接 文章讲解:1143.最长公共子序列 视频讲解:动态规划子序列问题经典题目 | LeetCode:1143.最长公共子序列 本题其实就跟718.最长重复子数组类似,不要求连续了,但是还是要求相对顺序的。 思路 确定dp数组下标

hihoCoder 1143 : 骨牌覆盖问题·一(递推,矩阵快速幂)

【题目链接】:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具。今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘。对于这个棋盘,一共有多少种不同的覆盖方法呢? 举个例子,对于长度为1到3的棋盘,我们有下面几种覆盖方式:

代码随想录算法训练营第五十三天| 1143.最长公共子序列 ,1035.不相交的线,53. 最大子序和 动态规划

题目与题解 1143.最长公共子序列 题目链接:1143.最长公共子序列 代码随想录题解:​​​​​​​1143.最长公共子序列 视频讲解:动态规划子序列问题经典题目 | LeetCode:1143.最长公共子序列_哔哩哔哩_bilibili 解题思路:         一开始试图用四层循环暴力法来做,就超时了。 看完代码随想录之后的想法          这里主要是dp定义跟前