码题集 传送阵

1.问题
在这里插入图片描述
在这里插入图片描述
2.总结
(1)字符串不能被修改
如果要修改字符串,只能先转成列表形式
(2)列表转为字符串输出
不能直接转,只能一个一个转,或者借助join函数
(3)以空格为间隔的一组输入
借用 str1.split()
(4)全局变量定义的时间和定义方式
定义在第一个函数一开始,不要在他被修改以后
(5)关键:这个函数的实现思路非常类似于概论课里学到的可解与不可解结点;这个题利用dfs来解真的结结实实秀到我了,原来深度优先搜索是这么用的,递归的思路一如既往难懂,但很有趣,很暴力;以及visit的三种状态真的yyds,我想了好久怎么实现循环,原来是正在处理状态一直不结束被再次碰到;能结束的就非循环
3.代码

def main():
    #code here
    global visit
    global a
    global tag
    n = int(input())
    a = [0] * n
    visit = [0] * n
    tag = ['N'] * n
    str_in=input()
    a=[int(n) for n in str_in.split()]
    for i in range(n):
        if(visit[i]==0):
            dfs(i)
    print("".join(tag))
    pass

def dfs(i):
    visit[i] = 1
    if(a[i]!=0):
        next=int(i+int(a[i]))
        if(visit[next]==0):
            dfs(next)
            tag[i]=tag[next]
        elif(visit[next]==1):
            tag[i]='Y'
        else:
            tag[i]=tag[next]
    visit[i]=2
if __name__ == '__main__':
    main();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值