【python】屈小原求三峡大学面积(CTGU百年校庆)

2023-10-24 14:04

本文主要是介绍【python】屈小原求三峡大学面积(CTGU百年校庆),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

"""

题目描述:

屈小原希望你能帮他求出一块地图中学校的面积。地图由nxm个方格组成,每个方格中都有一个小写的英文字母,如果该方格为学校所属,那么该方格必定是一段连续的ctgu的组成部分。从一个特定的字符开始,可以向上、下、左、右四个方向移动到相邻的方格。如果按照这种方式,能够从一个字符按顺序走到另一个字符,形成指定的字符串序列(在这个情况下是“ctgu”),那么这些方格被认为是连续的,即它们是学校的一部分。

输入:

第一行包含两个整数n,m(1<n,m<1000)-地图的大小。接下来的n行包含m个小写字母,描述指定的地图

输出:

对于每组测试数据,输出学校所占的方格数目。

样例1:

4 4

cbug

tgtc

gutc

cgtu

样例输出:

7

"""

代码:

"""
思路:深度优先搜索(DFS)
"""
N = 1000  # 设置二维数组的最大维度。预分配空间
# 在绝大多数情况下,上下左右移动的坐标变化确实应该是 (0, 1)、(0, -1)、(1, 0) 和 (-1, 0)。
dx = [0, 0, 1, -1]  # 定义了在x方向上的四个可能的移动(上下左右)
dy = [1, -1, 0, 0]  # 定义了在y方向上的四个可能的移动
ctgu = "ctgu"  # 目标字符串
# 初始化一个二维字符数组s,用于存储输入的字符数据
s = [['' for _ in range(N)] for _ in range(N)]  
# 初始化一个二维访问数组vis,用于标记某个位置是否被访问过
vis = [[0 for _ in range(N)] for _ in range(N)]def dfs(x, y, stk):u = len(stk)  # 获取当前堆栈的大小if u == 4:  # 如果堆栈大小为4,标记堆栈中所有位置为已访问,并终止搜索for i in range(4):# 元组,stk[i][0]表示第i个位置的x坐标,stk[i][1]表示第i个位置的y坐标vis[stk[i][0]][stk[i][1]] = 1returnfor i in range(4):  # 循环遍历四个可能的方向tx = x + dx[i]  # 计算新的x位置ty = y + dy[i]  # 计算新的y位置# 检查新位置是否在边界内,堆栈大小是否小于目标字符串的长度,和新位置的字符是否匹配目标字符串的当前字符if 0 <= tx < n and 0 <= ty < m and u < len(ctgu) and s[tx][ty] == ctgu[u]:# 如果满足条件,将新位置元组(tx, ty)添加到堆栈中stk.append((tx, ty))dfs(tx, ty, stk)  # 递归调用DFS函数stk.pop()  # 回溯:从堆栈中弹出最后一个位置  返回的是地图坐标n, m = map(int, input().split())  # 输入n和m的值
for i in range(n):s[i] = list(input())  # 将输入的字符串转换为字符列表,并赋值给s数组的对应行
for i in range(n):for j in range(m):stk = []  # 初始化一个空堆栈dfs(i, j, stk)  # 从位置(i, j)开始执行DFSans = 0  # 初始化答案变量为0
for i in range(n):for j in range(m):if vis[i][j]:  # 如果位置(i, j)被访问过,增加答案变量ans += 1
print(ans)  # 输出最终答案

 

这篇关于【python】屈小原求三峡大学面积(CTGU百年校庆)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

基于Python编写一个git自动上传的脚本(打包成exe)

《基于Python编写一个git自动上传的脚本(打包成exe)》这篇文章主要为大家详细介绍了如何基于Python编写一个git自动上传的脚本并打包成exe,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录前言效果如下源码实现利用pyinstaller打包成exe利用ResourceHacker修改e

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

Python中Tkinter GUI编程详细教程

《Python中TkinterGUI编程详细教程》Tkinter作为Python编程语言中构建GUI的一个重要组件,其教程对于任何希望将Python应用到实际编程中的开发者来说都是宝贵的资源,这篇文... 目录前言1. Tkinter 简介2. 第一个 Tkinter 程序3. 窗口和基础组件3.1 创建窗

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

浅析python如何去掉字符串中最后一个字符

《浅析python如何去掉字符串中最后一个字符》在Python中,字符串是不可变对象,因此无法直接修改原字符串,但可以通过生成新字符串的方式去掉最后一个字符,本文整理了三种高效方法,希望对大家有所帮助... 目录方法1:切片操作(最推荐)方法2:长度计算索引方法3:拼接剩余字符(不推荐,仅作演示)关键注意事

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

Python自动化提取多个Word文档的文本

《Python自动化提取多个Word文档的文本》在日常工作和学习中,我们经常需要处理大量的Word文档,本文将深入探讨如何利用Python批量提取Word文档中的文本内容,帮助你解放生产力,感兴趣的小... 目录为什么需要批量提取Word文档文本批量提取Word文本的核心技术与工具安装 Spire.Doc

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示