- 论坛徽章:
- 0
|
用蛮力法解决,耗了三分钟,一共得到了92个解,不知道有谁有解的个数的确切数字。最近迷python,就用它来实现了,水平有限,请各位高手指点。拿了个人家实现,几乎在1s内就实现了,哎,惭愧阿,我要摆脱蛮力法。
PS:今天利用闲暇时间想了想,要提高效率,最终就是要给出0-7八个数字的全排列,这样测试空间就会小很多。不过我还没有想出如何给出一个比较高效的全排列。
import time
def display (x):
i = 0
while i8:
print x
i+=1
def display_method (method):
x = [[0 for i in range(8)] for j in range(8)]
for i in range(8):
x[method[0]][method[1]]=1
display(x)
def stupid_method():
index=1
for pos1 in range(8):
for pos2 in range(8):
for pos3 in range(8):
for pos4 in range(8):
for pos5 in range(8):
for pos6 in range(8):
for pos7 in range(8):
for pos8 in range(8):
if True ==test(pos1 ,pos2 ,pos3,pos4,pos5,pos6,pos7,pos8):
print "This is "+str(index) + " method"
index+=1
def test(pos1 ,pos2 ,pos3,pos4,pos5,pos6,pos7,pos8) :
method =([0,pos1],[1,pos2],[2,pos3],[3,pos4],[4,pos5],[5,pos6],[6,pos7],[7,pos8])
for i in range(8):
for j in range(i+1,8):
if attack(method,method[j])==True:
return False
print "**************************"
display_method(method)
return True
def attack(x,y):
if x[1] == y[1]:
return True
if ((x[0]-y[0])**2) == ((x[1]-y[1])**2):
return True
return False
x = [[0 for i in range(8)] for j in range(8)]
cur_time1=time.time()
print "Start time "+time.strftime( "%Y-%m-%d %X", time.localtime() )
stupid_method()
cur_time2=time.time()
print "End time "+time.strftime( "%Y-%m-%d %X", time.localtime() )
print "Waste time "+str(cur_time2-cur_time1)+" seconds"
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/72023/showart_1977608.html |
|