本文共 1331 字,大约阅读时间需要 4 分钟。
test1 的判定函数:
''' @ sum(1,2,3,4) = sum(5,6,7,8) and @ sum(1,2,5,6) = sum(3,4,7,8) and @ sum(1,3,5,7) = sum(2,4,6,8) @ used for test 1'''def sumEqual(data): eq1 = sum(data[0:4]) == sum(data[4:8]) eq2 = sum(data[i << 1] for i in range(4)) == \ sum(data[i << 1 | 1] for i in range(4)) eq3 = sum(data[0:2]) + sum(data[4:6]) == \ sum(data[2:4]) + sum(data[6:8]) return eq1 and eq2 and eq3test 2 的判定函数:
''' @ for square matrix, the slop is +1 or -1, means @ abs(p.x - q.x) == abs(p.y - q.y) @ for data[], we make index i stand for row(coordinate x) i, and @ data[i] stand for col(coordinate y) data[i], so the conflict @ condition is: abs(i - j) == (data[i] - data[j]) @ used for test 2'''def NotConflict(data): for i in range(len(data) - 1): for j in range(i + 1, len(data)): if abs(i - j) == abs(data[i] - data[j]): return False return True主体:
cnt = 0 ''' @ get all the permutition of data and print ones that s.t. cf,'''def permutition(data, start, cf): if len( data ) <= 1: return if cf(data): print data global cnt; cnt += 1 for i in range(start, len( data ) - 1): for j in range( i + 1, len( data )): data[i], data[j] = data[j], data[i] permutition(data, i + 1, cf) data[i], data[j] = data[j], data[i]if __name__ == '__main__': data = [0,1,2,3,4,5,6,7,8] permutition(data, 0, cf = NotConflict) print cnt
转载地址:http://fumji.baihongyu.com/