ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第十三届蓝桥杯模拟赛 1 期 平面图连通

2022-03-19 23:59:06  阅读:206  来源: 互联网

标签:平面图 visit 蓝桥 range dx dy 教学楼 第十三届


问题描述
  著名设计师小蓝给蓝桥小学设计了一个教学楼。
  蓝桥小学经常下雨,所以校长希望教学楼任何地方都可以连通到其它地方。
  小蓝给出了教学楼的平面图,用一个 n 行 m 列的 01 矩阵表示,其中 0 表示空地,1 表示教学楼。两个相邻的 1 (上下相邻或左右相邻)之间互相可达。
  请帮小蓝检查一下,是否教学楼的任意两个地方都可以连通到其它地方。
输入格式
  输入的第一行包含两个整数 n, m,用一个空格分隔。
  接下来 n 行,每行一个长度为 m 的 01 串,表示教学楼的平面图。
输出格式
  如果满足要求,输出“YES”,否则输出“NO”,请注意字母全部都是大写。
n, m = map(int, input().split())  # 读入输入的行列,和n行每行一个长度为 m 的 01 串
hang = []
All = []
for i in range(n):
    hang = list(map(int, input()))
    All.append(hang)

visit = [[0 for i in range(m)] for j in range(n)]  # visit矩阵来记录走过的位置


def DFS(x, y):
    visit[x][y] = 1  # 表示此点已经搜索过
    fangxiang = [[x - 1, y], [x + 1, y], [x, y - 1], [x, y + 1]]
    for dx, dy in fangxiang:
        if dx < 0 or dx > n - 1 or dy < 0 or dy > m - 1:
            continue  # 如果是边框,跳过此方向
        elif visit[dx][dy] == 0:
            if All[dx][dy] == 0:
                continue
            elif All[dx][dy] == 1:
                DFS(dx, dy)
        elif visit[dx][dy] == 1:
            continue
    return


def find():
    for i in range(n):
        for j in range(m):
            if All[i][j] == 1:
                DFS(i, j)
                return


find()

if All == visit:
    print("YES")
else:
    print("NO")

在网上找了个遍都没找到python版本的,没办法,自己写吧

思路参考:深度优先搜索及python实现围棋“吃子”_吃草的哥哥哥斯拉的博客-CSDN博客_python围棋算法

标签:平面图,visit,蓝桥,range,dx,dy,教学楼,第十三届
来源: https://blog.csdn.net/m0_50890098/article/details/123605856

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有