import numpy as np
a=[4,1,2,5,4,0,6,7]
def rem(*args):
str=[0, 1, 2, 3, 4, 5, 6, 7]
for t in args:
str.remove(t)
return str
def isReturn(i):
for t in range(i):
if (abs( a[t] - a[i] ) == i-t):
return True;
return False
c=1
for a[0] in range(8):
for a[1] in rem(a[0]):
if( isReturn(1)):
continue
for a[2] in rem(a[0],a[1]):
if (isReturn( 2 )):
continue
for a[3] in rem(a[0],a[1],a[2]):
if (isReturn( 3 )):
continue
for a[4] in rem(a[0],a[1],a[2],a[3]):
if (isReturn(4)):
continue
for a[5] in rem(a[0],a[1],a[2],a[3],a[4]):
if (isReturn( 5 )):
continue
for a[6] in rem(a[0],a[1],a[2],a[3],a[4],a[5]):
if (isReturn( 6 )):
continue
for a[7] in rem(a[0],a[1],a[2],a[3],a[4],a[5],a[6]):
if (isReturn( 7 )):
continue
print(c,a)
c=c+1
print("OK")
92个解,改进一下:
import numpy as np
a=[4,1,2,5,4,0,6,7]
def rem(*args):
str=[0, 1, 2, 3, 4, 5, 6, 7]
for t in args:
str.remove(t)
return str
def pc(i):
str = [0, 1, 2, 3, 4, 5, 6, 7]
for t in range(i):
str.remove(a[t])
return str
def isReturn(i):
for t in range(i):
if (abs( a[t] - a[i] ) == i-t):
return True;
return False
c=1
for a[0] in range(8):
for a[1] in pc(1):
if( isReturn(1)):
continue
for a[2] in pc(2):
if (isReturn( 2 )):
continue
for a[3] in pc(3):
if (isReturn( 3 )):
continue
for a[4] in pc(4):
if (isReturn(4)):
continue
for a[5] in pc(5):
if (isReturn( 5 )):
continue
for a[6] in pc(6):
if (isReturn( 6 )):
continue
for a[7] in pc(7):
if (isReturn( 7 )):
continue
print(c,a)
c = c + 1;
print("OK")
继续:
import numpy as np
a=[4,1,2,5,4,0,6,7]
def rem(*args):
str=[0, 1, 2, 3, 4, 5, 6, 7]
for t in args:
str.remove(t)
return str
def pc(i):
str = [0, 1, 2, 3, 4, 5, 6, 7]
for t in range(i):
str.remove(a[t])
return str
c=1
def isContinue(i):
global c
for a[i] in pc(i ):
if (isReturn( i )):
return True
if (i == 6):
if isContinue( i + 1 ):
return True
if(i==7):
print(c,a)
c=c+1
return False
def isReturn(i):
for t in range(i):
if (abs( a[t] - a[i] ) == i-t):
return True;
return False
i=0
for a[i] in pc(i):
i=i+1;
for a[i] in pc(i):
if( isReturn(i)):
continue
i = i + 1;
for a[i] in pc(i):
if (isReturn( i )):
continue
i = i + 1;
for a[i] in pc(i): #3
if (isReturn( i )):
continue
i = i + 1;
for a[i] in pc( i ):
if (isReturn(i)):
continue
i = i + 1;
for a[i] in pc( i ): #5
if (isReturn( i )):
continue
i = i + 1;
for a[i] in pc( i ):
if (isReturn( i )):
continue
i = i + 1;
for a[i] in pc( i ):
if (isReturn( i )):
continue
print( c, a )
c = c + 1
i = i - 1
i = i - 1
i = i - 1
i = i - 1
i = i - 1
i = i - 1
i = i - 1
print("OK")
接着:
import numpy as np
a=[4,1,2,5,4,0,6,7]
def rem(*args):
str=[0, 1, 2, 3, 4, 5, 6, 7]
for t in args:
str.remove(t)
return str
def pc(i):
str = [0, 1, 2, 3, 4, 5, 6, 7]
for t in range(i):
str.remove(a[t])
return str
def nextStep():
global i
global c
i = i + 1;
for a[i] in pc( i ):
if (isReturn( i )):
continue
if(i==7):
print( c, a )
c = c + 1
else:
nextStep()
i = i - 1
c=1
def isContinue(i):
global c
for a[i] in pc(i ):
if (isReturn( i )):
return True
if (i == 6):
if isContinue( i + 1 ):
return True
if(i==7):
print(c,a)
c=c+1
return False
def isReturn(i):
for t in range(i):
if (abs( a[t] - a[i] ) == i-t):
return True;
return False
i=0
for a[i] in pc(i):
i=i+1;
for a[i] in pc(i):
if( isReturn(i)):
continue
i = i + 1;
for a[i] in pc(i):
if (isReturn( i )):
continue
i = i + 1;
for a[i] in pc(i): #3
if (isReturn( i )):
continue
i = i + 1;
for a[i] in pc( i ):
if (isReturn(i)):
continue
i = i + 1;
for a[i] in pc( i ): #5
if (isReturn( i )):
continue
nextStep()
i = i - 1
i = i - 1
i = i - 1
i = i - 1
i = i - 1
print("OK")
很快,主代码成这样了:
i=0
for a[i] in pc(i):
nextStep()
print("OK")