zoukankan      html  css  js  c++  java
  • 逻辑转体解法

    from py2neo import Graph, Node, Relationship
    
    graphdb = Graph(host='localhost', http_port=7978, user='neo4j', password='123456')
    
    
    # 检查当前步是否有效
    def checkEnable(p):
        count = 0
        for i in range(0, 4):
            if p[i] > 56:
                return False
            if p[i] < 0:
                return False
            if p[i] == 13 or p[i] == 43:
                return False
            if p[i] == 0:
                count = count + 1
        # 不可能是单个坐标是0
        if count % 2 > 0:
            return False
        return True
    
    
    # 获取可以移动的位置
    def move(x):
        paths = []
        left = None
        right = None
        # 平躺
        if x[1] > 0 and x[3] > 0:
            up = (x[0] + 14, x[1] + 14, 0, 0, "")
            down = (x[0] - 7, x[1] - 7, 0, 0, "")
            if x[1] / 7 != 0:
                left = (x[0] + 2, 0, x[2] + 2, 0, "")
            if (x[0] - 1) / 7 != 0:
                right = (x[0] - 1, 0, x[2] - 1, 0, "")
        # 立起时
        else:
            # 立Y
            if x[1] == 0 and x[3] == 0:
                up = (x[0] + 14, 0, x[2] + 14, 0, "")
                down = (x[0] - 14, 0, x[2] - 14, 0, "")
                if x[0] % 7 < 6:
                    left = (x[0] + 1, x[0] + 2, x[2] + 1, x[2] + 2, "")
                if x[2] % 7 > 2 or x[2] % 7 == 0:
                    right = (x[0] - 2, x[0] - 1, x[2] - 2, x[2] - 1, "")
            # 立X
            else:
                up = (x[0] + 7, x[1] + 7, x[0] + 14, x[1] + 14, "")
                down = (x[0] - 14, x[1] - 14, x[0] - 7, x[1] - 7, "")
                if x[0] % 7 < 5:
                    left = (x[0] + 2, x[1] + 2, 0, 0, "")
                if x[1] % 7 > 2 or x[1] % 7 == 0:
                    right = (x[0] - 2, x[1] - 2, 0, 0, "")
        if checkEnable(up):
            paths.append(up)
        if checkEnable(down):
            paths.append(down)
        if left and checkEnable(left):
            paths.append(left)
        if right and checkEnable(right):
            paths.append(right)
        return paths
    
    
    def nodeHash(node):
        if node == None:
            return "";
        key = []
        for i in range(0, 4):
            key.append(str(node[i]))
        return "#".join(key)
    
    
    def buildMap(node, path):
        dic = {}
        key = nodeHash(node)
        dic[key] = path
        return dic;
    
    
    def buildGraph():
        graphdb.delete_all()
        # 平躺
        x = (1, 2, 8, 9)
        for i in range(0, 6):
            sx = (x[0] + i, x[1] + i, x[2] + i, x[3] + i)
            for j in range(0, 7):
                sy = (sx[0] + j * 7, sx[1] + j * 7, sx[2] + j * 7, sx[3] + j * 7)
                # print(sy)
                if checkEnable(sy):
                    path = move(sy)
                    # map = buildMap(sy, path)
                    # print(map)
                    writedb(sy, path)
    
        # x站立
        x = (1, 2, 0, 0)
        for i in range(0, 6):
            sx = (x[0] + i, x[1] + i, 0, 0)
            for j in range(0, 8):
                sy = (sx[0] + j * 7, sx[1] + j * 7, 0, 0)
                if checkEnable(sy):
                    path = move(sy)
                    # map = buildMap(sy, path)
                    # print(map)
                    writedb(sy, path)
    
        # y站立
        x = (1, 0, 8, 0)
        for i in range(0, 7):
            sx = (x[0] + i, 0, x[2] + i, 0)
            for j in range(0, 7):
                sy = (sx[0] + j * 7, 0, sx[2] + j * 7, 0)
                if checkEnable(sy):
                    path = move(sy)
                    # map = buildMap(sy, path)
                    # print(map)
                    writedb(sy, path)
    
    
    def writedb(node, path):
        a = Node("mg", name=nodeHash(node))
        graphdb.merge(a, "mg", "name")
        for p in path:
            b = Node("mg", name=nodeHash(p))
            relationship = Relationship(a, p[4], b)
            relationship['date'] = p[4]
            graphdb.merge(b, "mg", "name")
            graphdb.create(relationship)
    
    
    if __name__ == '__main__':
        # buildGraph()
        data = graphdb.run('''
        MATCH (p1:mg{name:"2#3#9#10"}),(p2:mg{name:"34#35#41#42"}),
    p=shortestpath((p1)-[*..10]->(p2))
    RETURN p
        ''').data()
        for record in data:
            for k in record:
                a = record[k]
                for t in a:
                    for t1 in t.values():
                        print(t1, end="->")

    ps:所有的1、2、3、4阶题目均已求解完成,全套题库已生成,欢迎大家来交流,在此强烈鄙视那些采集博客的网站

    原创地址:https://www.cnblogs.com/wujf/p/13390707.html

  • 相关阅读:
    EasyUI——常见用法总结
    递归算法(转)
    1215整理
    jQuery Ajax 实例 全解析(转)
    EL表达式 (详解)
    JSTL 核心标签库 使用(转)
    JSTL标签用法 详解(转)
    JDBC连接Oracle数据库时出现的ORA-12505错误及解决办法
    java中的基本jdbc中mvc基本示例
    Hibernate的QBC检索方式
  • 原文地址:https://www.cnblogs.com/wujf/p/13390707.html
Copyright © 2011-2022 走看看