当前位置: 首页 > news >正文

番禺网站建设制作今日国内新闻10则

番禺网站建设制作,今日国内新闻10则,龙游发布紧急提示,广西建设职业技术学校官方网站有一个 H H H 行 W W W 列的迷宫(行号从上到下是 1 − H 1−H 1−H,列号从左到右是 1 − W 1−W 1−W),现在有一个由 . 和 # 组成的 H 行 W 列的矩阵表示这个迷宫的构造,. 代表可以通过的空地,# 代表不…

有一个 H H H W W W 列的迷宫(行号从上到下是 1 − H 1−H 1H,列号从左到右是 1 − W 1−W 1W),现在有一个由 .# 组成的 HW 列的矩阵表示这个迷宫的构造,. 代表可以通过的空地,# 代表不能通过的墙。

现在有个人从 起点 ( 1 , 1 ) (1,1) (1,1) 开始走,他每一步只能往右走一格或者往下走一格,并且他不能跨越迷宫的边界。他会一直走,直到没有可以走的路时停下来。

请问这个人最多可以经过多少个格子?

输入格式

第一行两个整数 H H H W W W,表示迷宫有 H H H W W W 列。

接下来一个 H H H W W W 列的由 .# 组成的矩阵,表示迷宫的构造。

注意:保证 ( 1 , 1 ) (1,1) (1,1) 的位置一定是 .

输出格式

一个整数,表示最多步数。

样例输入1

3 4
.#..
..#.
..##

样例输出1

4

样例输入2

1 1
.

样例输出2

1

样例输入3

5 5
.....
.....
.....
.....
.....

样例输出3

9

数据规模

对于全部数据保证 1 ≤ H , W ≤ 100 1≤H,W≤100 1H,W100

解题思路

主体思路为动态规划,时间复杂度为 O ( H ∗ W ) O(H*W) O(HW)

由题意可知,我们到达一个格子的方式只有从左边和上边到达两种情况,那么我们就继承这两种情况中步数更多的一种 + 1 +1 +1来更新:

sum[i][j] = max(sum[i - 1][j], sum[i][j - 1]) + 1;

采用二重循环遍历整张图,由循环顺序,显而易见:在我们到达(i, j)之前,已经到达了(i - 1, j)(i, j - 1)

for (int i = 1; i <= h; i++) {for (int j = 1; j <= w; j++) {sum[i][j] = max(sum[i - 1][j], sum[i][j - 1]) + 1;}
}

但是需要注意两点:

(1)注意障碍物的存在,以下代码采用的方式是掩码把墙的sum置为 0 0 0

(2)注意寻找最大步数时还需要进行一次 B F S BFS BFS,因为我们可能到达不了某些格子,从而导致我们得到的答案并不是sum数组中的最大值。

AC代码如下:

#include <iostream>
#include <queue>
using namespace std;
const int max_h = 100;
const int max_w = 100;bool map[max_h + 1][max_w + 1], book[max_h][max_w];
long long sum[max_h + 1][max_w + 1];
long long h, w, ans = 1;
struct node { int x, y; };
queue<node>q;inline void read() {string str;cin >> h >> w;for (int i = 1; i <= h; i++) {cin >> str;for (int j = 1; j <= w; j++) {if (str[j - 1] == '.') map[i][j] = true;else map[i][j] = false;}}
}void bfs() {q.push(node{ 1,1 });book[1][1] = true;int step[2][2] = { {1,0}, {0,1} }, temp_x, temp_y;while (!q.empty()) {node temp = q.front(); q.pop();for (int i = 0; i < 2; i++) {temp_x = step[i][0] + temp.x;temp_y = step[i][1] + temp.y;if (temp_x > h || temp_y > w) continue;if (!map[temp_x][temp_y]) continue;if (book[temp_x][temp_y]) continue;q.push(node{ temp_x,temp_y });book[temp_x][temp_y] = true;ans = max(ans, sum[temp_x][temp_y]);}}
}inline void solve() {for (int i = 1; i <= h; i++) {for (int j = 1; j <= h; j++) {sum[i][j] = max(sum[i - 1][j] * map[i - 1][j],sum[i][j - 1] * map[i][j - 1]) + 1;}}bfs();cout << ans << endl;
}int main() {read();solve();return 0;
}
http://www.15wanjia.com/news/15867.html

相关文章:

  • 创建团购网站免费外链发布平台
  • 青岛网站建设选圣城在线营销推广
  • 网加做网站推广网络推广员是干嘛的
  • 南昌专业做网站的浙江百度查关键词排名
  • 郑州做网站建设公司哪家好视频号推广方法
  • 做神马网站优化排小程序设计
  • 如何免费建立可以交流的网站广州seo公司排名
  • 哪些网站可以免费做推广呢如何搭建网站平台
  • 南昌网站建设模板合作网站服务器多少钱一年
  • 做网站图片代码怎么居中5000元网站seo推广
  • 在线做章网站自己在家怎么做电商
  • 品牌策划咨询设计公司百度网站排名优化
  • 怎么做网站赚seo推广的全称是
  • 网站后台管理的超链接怎么做北京百度快照推广公司
  • 麻涌网站建设百度权重怎么看
  • 策划公司网站设计如何用google搜索产品关键词
  • 网站建设 提案 框架怎么找一手app推广代理
  • 做分享衣服网站的初衷是什么意思百度竞价多少钱一个点击
  • 北京网站制作培训班seo扣费系统
  • 昭通昭阳区城乡建设管理局网站上海关键词优化按天计费
  • xml网站开发工具网络推广宣传
  • 分享惠网站怎么做小学生班级优化大师
  • 大兴网站建设推广千锋教育培训机构怎么样
  • 做的比较好的医院网站郑州疫情最新情况
  • 微友说是做网站维护让帮忙投注成都网站制作关键词推广排名
  • 广州网站建设十年乐云seo引流推广效果好的app
  • wordpress 缩略图模糊seo网站优化软件
  • 网站建设的缺点国际新闻最新消息美国
  • 易营宝自助建站系统关键词优化软件有哪些
  • 做网站id苏州做网站哪家比较好