kmm

来源:互联网 发布:牛魔王 知乎 编辑:程序博客网 时间:2024/06/08 04:44

#-*-coding:cp936-*-g_max = 0class POS:    def __init__(self, val):        self.x = 0        self.y = 0        self.z = 0        i = 0        v = 1        while True:            if v < val:                i += 1                v += 6*i            else:                break        if i > 0:            side = (v - val)/i            step = (v - val)%i            if side == 0:                self.x = i                self.y = -i + step                self.z =  self.x + self.y            if side == 1:                self.z = i                self.y = step                self.x = self.z - self.y            if side == 2:                self.y = i                self.z = i - step                self.x = self.z - self.y            if side == 3:                self.x = -i                self.y = i - step                self.z = self.x + self.y            if side == 4:                self.z = -i                self.y = -step                self.x = self.z - self.y            if side == 5:                self.y = -i                self.z = -i + step                self.x = self.z - self.y    def __sub__(self, p): # override minus method        if self.x > p.x:            i = self.x - p.x        else:            i = p.x - self.x        if self.y > p.y:            j = self.y - p.y        else:            j = p.y - self.y        if self.z > p.z:            k = self.z -p.z        else:            k = p.z - self.z        if i > j:            if i > k:                return i            else:                return k        elif j > k:            return j        else:            return kdef InitCellularDistrict(iMaxSeqValue):    global g_max     if iMaxSeqValue > 0 and iMaxSeqValue <= 100000:        g_max = iMaxSeqValue        return 0    else:        return -1def GetShortestPathLength(iFirstValue, iSecondValue):    global g_max    if 0 < iFirstValue and iSecondValue <= g_max and 0 < iSecondValue and iSecondValue <= g_max:        first = POS(iFirstValue)        second = POS(iSecondValue)        return first-seconddef Clear():    g_max = 0if __name__ == '__main__':    InitCellularDistrict(70)    a = GetShortestPathLength(70, 7)    print str(a)

0 0
原创粉丝点击