Python DFS基础例题:全排列问题、最大连通

全排列问题

按照字典序输出自然数 1 1 1 到 n n n 所有不重复的排列,即 n n n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

输入格式

一个整数 n n n。
输出格式

由 1 ∼ n 1 \sim n 1∼n 组成的所有不重复的数字序列,每行一个序列。

每个数字保留 5 5 5 个场宽。
样例输入

复制代码
3

样例输出

复制代码
	1    2    3
    1    3    2
    2    1    3
    2    3    1
    3    1    2
    3    2    1

提示
1 ≤ n ≤ 9 1 \leq n \leq 9 1≤n≤9。
解题思路

代码:

python 复制代码
"""
"""
n = int(input())
x = [0] * (n + 1) # 1-n
vis = [0] * (n + 1) # 标记
d = [0] * (n + 1) # 当前排列的数组
for i in range(1, n + 1):
    x[i] = i 

def dfs(step):
    if step == n + 1:# 如果长度已经最大,则输入当前的序列 d
        for i in range(1, n + 1):
            print('%5d'%d[i],end='')
        print()
        return
    for i in range(1, n + 1):
        if vis[i] == 0: # 如果该标记为0,则认为还没有走过这歌分支
            d[step] = x[i]
            vis[i] = 1 # 将该位置标记为1,后续暂时不走(保留现场)
            dfs(step + 1) # 继续走下一步
            vis[i] = 0 # 恢复现场,后续可以继续使用
    return

dfs(1)

最大连通

题目链接:最大连通(蓝桥)

解题思路

定义四个方向,x和y的,然后开始寻找,如果当前值为0,那么返回0,表示走不通。如果是1的话,将当前的元素置为0,表示已经走过,然后依次寻找四个方向,继续做深度优先遍历。如果遇到边界情况要进行判断,之后进行累加连通的块数即可。

python 复制代码
n, m = 30, 60
# dx, dy为四个方向
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

def dfs(x, y):
    if g[x][y] == '0':  return 0 # 如果为0,则该地方走不通
    g[x][y] = '0'
    cnt = 1 #记录连通分块数
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if nx < 0 or nx >= n or ny < 0 or ny >= m:  continue
        cnt += dfs(nx, ny)
    return cnt

# 获取输入
g = list()
for i in range(n):
    g.append(list(input().strip()))
print(g)

ans = 0
for i in range(n):
    for j in range(m):
        if g[i][j] == '1':
            ans = max(ans, dfs(i,  j))
print(ans)
相关推荐
rannn_1117 小时前
【力扣hot100】链表专题|160、206、234、141、142
java·算法·leetcode·链表·面试·开发
数模竞赛Paid answer7 小时前
2026年华东杯数学建模B题医药物流安排问题解题全过程文档及程序
算法·数学建模·数据分析·华东杯
leisoo80977 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
WangYan20227 小时前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
不会代码的小猴8 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
AI备案指南-满满8 小时前
大模型与算法备案全流程详解:从零到通过的完整指南
人工智能·算法·备案·大模型备案·算法备案
江畔柳前堤8 小时前
LLM 训练核心机制深度解析:Warmup、Cosine Decay 与 Perplexity 的完整知识体系
网络·人工智能·深度学习·算法·机器学习·语音识别
一只旭宝9 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
良木林9 小时前
子串 - LeetCode hot 100
算法·leetcode·职场和发展