实现思想就是将每个循环的循环次数存储在一维数组里
应用场景是对于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重循环