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

如何制作简单网页西安优化多钱

如何制作简单网页,西安优化多钱,开网页慢,网络科技公司注册要求题目描述 小华和小为是很要好的朋友,他们约定周末一起吃饭。 通过手机交流,他们在地图上选择了多个聚餐地点(由于自然地形等原因,部分聚餐地点不可达),求小华和小为都能到达的聚餐地点有多少个&#xff1…

题目描述

小华和小为是很要好的朋友,他们约定周末一起吃饭。

通过手机交流,他们在地图上选择了多个聚餐地点(由于自然地形等原因,部分聚餐地点不可达),求小华和小为都能到达的聚餐地点有多少个?

输入描述
第一行输入 m 和 n

m 代表地图的长度
n 代表地图的宽度
第二行开始具体输入地图信息,地图信息包含:

0 为通畅的道路
1 为障碍物(且仅1为障碍物)
2 为小华或者小为,地图中必定有且仅有2个 (非障碍物)
3 为被选中的聚餐地点(非障碍物)
输出描述
可以被两方都到达的聚餐地点数量,行末无空格。

备注
地图的长宽为 m 和 n,其中:

4 ≤ m ≤ 100
4 ≤ n ≤ 100
聚餐的地点数量为 k,则

1< k ≤ 100
用例

输入4 4
2 1 0 3
0 1 2 1
0 3 0 0
0 0 0 0
输出2
说明

第一行输入地图的长宽为3和4。

第二行开始为具体的地图,其中:3代表小华和小明选择的聚餐地点;2代表小华或者小明(确保有2个);0代表可以通行的位置;1代表不可以通行的位置。

此时两者能都能到达的聚餐位置有2处。

输入4 4
2 1 2 3
0 1 0 0
0 1 0 0
0 1 0 0
输出0
说明

第一行输入地图的长宽为4和4。

第二行开始为具体的地图,其中:3代表小华和小明选择的聚餐地点;2代表小华或者小明(确保有2个);0代表可以通行的位置;1代表不可以通行的位置。

由于图中小华和小为之间有个阻隔,此时,没有两人都能到达的聚餐地址,故而返回0。

解题思路:双源点广度优先搜索

这道题要求找出两个朋友都能到达的聚餐地点数量。解决问题的关键在于准确模拟两个人的移动范围,并找到他们可达区域的交集。以下是分步解析:


核心思路图解

1. 问题本质
  • 地形特征:地图中存在两种特殊标记
    • 2:表示小华和小为的初始位置
    • 3:表示目标聚餐地点
  • 移动规则:每次可以向上下左右四个方向移动,遇到障碍物(1)则无法通过
  • 最终目标:找出所有同时被两人可达的3的位置
2. 关键观察
  • 独立搜索:需要分别计算两人的可达区域
  • 集合运算:最终结果是两人可达3的交集数量
  • 高效搜索:广度优先搜索(BFS)天然适合模拟扩散过程
3. 算法选择

采用双BFS搜索的原因:

  • 能够准确记录每个起点的可达区域
  • 时间复杂度O(2×m×n),完全满足题目数据范围
  • 使用集合运算快速求交集

实现步骤详解

步骤一:定位初始位置

遍历整个矩阵,记录所有值为2的坐标。根据题目要求,必定能找到且仅有两个起点。

# 示例代码段:寻找初始位置
starts = []
for i in range(m):for j in range(n):if grid[i][j] == 2:starts.append((i, j))
src1, src2 = starts
步骤二:BFS可达区域计算

对每个起点执行标准BFS算法:

  1. 初始化队列和访问标记集合
  2. 记录所有经过的3的位置
  3. 使用四个方向向量进行扩散
from collections import dequedef bfs(start_x, start_y):visited = set()queue = deque([(start_x, start_y)])visited.add((start_x, start_y))targets = set()directions = [(-1,0), (1,0), (0,-1), (0,1)]while queue:x, y = queue.popleft()for dx, dy in directions:nx, ny = x + dx, y + dy# 边界检查 + 障碍物检查 + 访问状态检查if 0 <= nx < m and 0 <= ny < n:if (nx, ny) not in visited and grid[nx][ny] != 1:visited.add((nx, ny))if grid[nx][ny] == 3:targets.add((nx, ny))queue.append((nx, ny))return targets
步骤三:结果统计

计算两个可达集合的交集大小:

set1 = bfs(src1[0], src1[1])
set2 = bfs(src2[0], src2[1])
print(len(set1 & set2))

代码实现与解析

from collections import deque# 读取输入
m, n = map(int, input().split())
grid = [list(map(int, input().split())) for _ in range(m)]# 查找初始位置
starts = []
for i in range(m):for j in range(n):if grid[i][j] == 2:starts.append((i, j))
src1, src2 = starts# BFS函数定义
def find_reachable(start):visited = set([start])queue = deque([start])reachable = set()dirs = [(-1,0),(1,0),(0,-1),(0,1)]while queue:x, y = queue.popleft()for dx, dy in dirs:nx, ny = x+dx, y+dyif 0<=nx<m and 0<=ny<n:if (nx,ny) not in visited and grid[nx][ny] !=1:visited.add((nx,ny))if grid[nx][ny] ==3:reachable.add((nx,ny))queue.append((nx,ny))return reachable# 计算并输出结果
reach1 = find_reachable(src1)
reach2 = find_reachable(src2)
print(len(reach1 & reach2))

复杂度与优化分析

时间复杂度
  • 两次BFS:每个BFS时间复杂度为O(m×n)
  • 集合操作:O(k)(k为可达点数量)
  • 总复杂度:O(m×n),可轻松处理100×100的矩阵
空间复杂度
  • 队列存储:最坏情况O(m×n)
  • 访问标记:使用集合存储,空间O(m×n)
  • 总空间:O(m×n),完全在合理范围

典型案例验证

示例输入1

4 4
2 1 0 3
0 1 2 1
0 3 0 0
0 0 0 0
  • 路径分析
    • 小华(0,0)可达3:(0,3), (2,1)
    • 小为(1,2)可达3:(2,1), (3,0)
  • 交集:共2个公共点(具体取决于路径)

示例输入2

4 4
2 1 2 3
0 1 0 0
0 1 0 0
0 1 0 0
  • 路径分析:两人被纵向障碍物完全隔离
  • 交集:空集,输出0

边界条件处理

  1. 包围情况:两人被障碍物完全包围时返回0
  2. 边缘起点:起点在角落时的边界检查
  3. 单通路连接:两人通过唯一通道连接时的正确判断
  4. 大规模数据:Python的高效队列处理能力

通过清晰的BFS实现和集合运算,这道题可以被高效且准确地解决。掌握这种双源点搜索方法对类似问题(如多起点扩散问题)的解决具有重要意义。


文章转载自:

http://gYI7LZ7F.wjjxr.cn
http://gQX8yavn.wjjxr.cn
http://63SjZ9qX.wjjxr.cn
http://ixSLJ2TG.wjjxr.cn
http://n2e5HNSg.wjjxr.cn
http://uRlnlQJE.wjjxr.cn
http://Mg7ETm0V.wjjxr.cn
http://xjI1MBvX.wjjxr.cn
http://wgvANm7I.wjjxr.cn
http://mdGjoWnL.wjjxr.cn
http://YzX9jiOK.wjjxr.cn
http://1HSxQyHa.wjjxr.cn
http://MAbzlioE.wjjxr.cn
http://1kBImQ0j.wjjxr.cn
http://I4t2e3IS.wjjxr.cn
http://SavrCs35.wjjxr.cn
http://DZfB7ZU8.wjjxr.cn
http://c4q1zLfa.wjjxr.cn
http://c3Ra8cN3.wjjxr.cn
http://I4Lh93y2.wjjxr.cn
http://236zOSOA.wjjxr.cn
http://lGe0SSxi.wjjxr.cn
http://jPbJjWY0.wjjxr.cn
http://rfiiNXqj.wjjxr.cn
http://iXcrvO6O.wjjxr.cn
http://dyL6fqKM.wjjxr.cn
http://nOnuUO7d.wjjxr.cn
http://7cW7JmH2.wjjxr.cn
http://kzdM7q7O.wjjxr.cn
http://tjOKLGKA.wjjxr.cn
http://www.dtcms.com/wzjs/686175.html

相关文章:

  • 网站开发项目延期说明网站让女友做网站模特
  • 学习网站开发流程定安免费建站公司
  • 盐城整站优化网站设计制作规范
  • 九江建网站公司有哪些怎样开发wordpress主题
  • 公司网站开发立项文档大秦wordpress付费阅读
  • 关于电子商务的网站推广方案快速一体化网站建设
  • 台州网站策划台州网站策划做公司网站麻烦吗
  • 百度公司做网站做网站 大文件
  • 南部网站建设山西建设厅网站密钥
  • 网站初期做几个比较好兴义之窗网站怎么做
  • 备案主体负责人和网站负责人石家庄企业做网站
  • 哪个推广网站好哪里卖网站模板
  • 网站建设与管理名词解释延吉建设局网站
  • 做网站是自己公司做好还是外包好html做的网站怎么弄
  • 外贸seo网站0基础网站建设教程视频
  • 网站备案查询中心大学有吗网站建设
  • 网站在百度无法验证码怎么办小白一步步做网站
  • 做家具网站江苏建工
  • 网站建设作业多少钱模块建站工具
  • 作为一个专业的网页制作人员任丘网站优化
  • 影视传媒公司网站模板旅行网站开发意义
  • 做任务挣钱的网站聚河南高端网站
  • 有名的产品设计公司seo推广软件代理
  • 做博客和做网站大学生为什么不去中建
  • net网站开发环境电脑培训机构哪里有
  • 动漫网站开发 百度一下wordpress 产品主题
  • 广安市国土资源局网站建设线上设计师接单
  • 企业网站建设的方法有哪些计算机论文8000到10000字
  • 天水市秦州区作风建设年网站用凡科帮别人做网站
  • 国内知名的网站建设企业怎么自己注册网站