一维数组实现N重循环#Python

实现思想就是将每个循环的循环次数存储在一维数组里

应用场景是对于n个节点的无向图,查找任意m个节点的最短路径

本文使用排列组合的放回不放回作为例子,附上for循环的实现以供参考

如有错误,还望不吝赐教

示例1:求放回排列A(3,1)A(3,1)

输出结果: 

[0, 0]
[0, 1]
[0, 2]
[1, 0]
[1, 1]
[1, 2]
[2, 0]
[2, 1]
[2, 2]

for实现:

N=2        #n重循环
LEN=3      #循环次数

for i in range(0,LEN):
    for j in range(0,LEN):
        print([i,j])

一维数组实现:

N=2         #n重循环
LEN=3       #循环次数
loop=[0 for temp in range(N)]   #每层循环的初值
#判断最外层循环是否结束
while loop[0]!=LEN:   
    #循环操作
    print(loop)
    #完成一次最内层循环
    loop[-1]+=1                 #最内层循环次数加1
    for i in range(N-1,0,-1):
        if loop[i]==LEN:          #当i层循环结束
            loop[i-1]+=1        #i-1层循环加1
            loop[i]=0           #第i层重新初始化

示例2:求不放回排列A(3,2)

输出结果:

[0, 1]
[0, 2]
[1, 0]
[1, 2]
[2, 0]
[2, 1]

for实现:

N=2         #n重循环
LEN=3       #循环次数

for i in range(LEN):
    for j in range(LEN):
        if i==j:continue
        print([i,j])

一维数组实现:

N=2         #n重循环
LEN=3       #循环次数
loop=[0 for temp in range(N)]   #每层循环的初值
#判断最外层循环是否结束
while loop[0]!=LEN:   
    if set(loop).__len__()==N:
        # 循环操作
        print(loop)
    #完成一次最内层循环
    loop[-1]+=1                 #最内层循环次数加1
    for i in range(N-1,0,-1):
        if loop[i]==LEN:        #当i层循环结束
            loop[i-1]+=1        #i-1层循环加1
            loop[i]=0           #第i层重新初始化

示例3:求放回组合C(3,1)C(3,1)

输出结果:

[0, 0]
[0, 1]
[0, 2]
[1, 1]
[1, 2]
[2, 2]

for实现:

N=2        #n重循环
LEN=3      #循环次数

for i in range(0,LEN):
    for j in range(i,LEN):
        print([i,j])

一维数组实现:

N=2        #n重循环
LEN=3      #循环次数
loop=[0 for temp in range(N)]      #每层循环的初值
#判断最外层循环是否结束
while loop[0]!=LEN:   
    #循环操作
    print(loop)
    #完成一次最内层循环
    loop[-1]+=1                     #最内层循环次数加1
    for i in range(N-1,0,-1):  
        if loop[i]==LEN:            #当i层循环结束
            loop[i-1]+=1            #i-1层循环加1
            for j in range(i,N):    #i~N-1层循环重新赋初值
                loop[j]=loop[j-1]

示例4:求不放回组合C(5,3)

输出结果:

[0, 1, 2]
[0, 1, 3]
[0, 1, 4]
[0, 2, 3]
[0, 2, 4]
[0, 3, 4]
[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]

for实现:

N=3        #n重循环
LEN=5      #循环次数

for i in range(0,LEN-N+1):
    for j in range(i+1,LEN-N+2):
        for k in range(j+1,LEN-N+3):
            print([i,j,k])

一维数组实现:

N=3        #n重循环
LEN=5      #循环次数
loop=[temp for temp in range(N)]      #每层循环的初值
#判断最外层循环是否结束
while loop[0]!=LEN-N+1:   
    #循环操作
    print(loop)
    #完成一次最内层循环
    loop[-1]+=1                     #最内层循环次数加1
    for i in range(N-1,0,-1):  
        if loop[i]==LEN+i+1-N:      #当i层循环结束
            loop[i-1]+=1            #i-1层循环加1
            for j in range(i,N):    #i~N-1层循环重新赋初值
                loop[j]=loop[j-1]+1

不过,正经人谁写n重循环啊?!

参考链接:

JavaScript实现 n 重循环的算法,n 是变量,且每重循环的循环次数也是变量_ senai_fh博客-CSDN博客_n重循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值