首页 > 编程语言 > 详细

基本算法3

时间:2020-02-26 13:15:38      阅读:50      评论:0      收藏:0      [点我收藏+]
周游:
from enum import Enum
class COLORS(Enum):
    white=1
    gray=2
    black=3
class NODE(object):
    def __init__(self,value):
        self._value=value
        self.connections={}
        self._parent=None
        self._color=COLORS.white

    def __str__(self):
        return str(self._value)

    def getWeight(self,item):
        return self.connections.get(item,0)
    def addNeibor(self,item,weight=1):
        self.connections[item]=weight

    @property
    def color(self):
         return self._color
    @color.setter
    def color(self,value):
        self._color=value

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self,value):
        self._value=value
    @property
    def parent(self):
        return self._parent
    @parent.setter
    def parent(self,item):
        self._parent=item


    def getNeibor(self):
        return self.connections.keys()

    def getNeiborByOrder(self):
        ret=[]
        for neibor in self.getNeibor():
            if neibor.color==COLORS.white:
                sons=[son for son in neibor.getNeibor() if son.color==COLORS.white]
                ret.append((len(sons),neibor))
        ret.sort(key=lambda x:x[0])
        return [son[-1] for son in ret]


    def setParent(self,item):
        self.parent=item

    @property
    def dis(self):
        return self._dis

    @dis.setter
    def dis(self,value):
        self._dis=value



class GRAPH(object):
    def __init__(self):
        self.sons={}
        self.size=0

    def show(self):
        for item in self.getall():
            return  (item)

    def addSon(self,value):
        self.sons[value]=NODE(value)
        self.size +=1

    def getSon(self,value):
        return self.sons.get(value,None)
    def getall(self):
        return  self.sons.values()

    def addEdge(self,value1,value2,weight=1):
        if value1 not in self.sons:
            self.addSon(value1)
        if value2 not in self.sons:
            self.addSon(value2)
        self.sons[value1].addNeibor(self.sons[value2],weight)

def creatSons(m,n,row,col):
    steps=[(-2,-1),(-2,1),(-1,-2),(-1,2),
          (2,-1),(2,1),(1,-2),(1,2)]
    legal_pos=[]
    for step in steps:
        x=row+step[0]
        y=col+step[1]
        if x>0 and x<m+1:
            if y>0 and y<n+1:
                legal_pos.append((x,y))
    return legal_pos

def genId(m,n,row,col):
    return (row-1)*m+col

def genData(m,n):
    g=GRAPH()
    for i in range(1,m+1):
        for j in range(1,n+1):
            neibors=creatSons(m,n,i,j)
            for neibor in neibors:
                g.addEdge(genId(m,n,i,j),genId(m,n,neibor[0],neibor[1]))
    return g

def lvYou(total_steps,current,num,path):
    if num != total_steps:
        current.color=COLORS.gray
        flag=False
        for son in current.getNeiborByOrder():
            if son.color == COLORS.white :
                flag=lvYou(total_steps,son,num+1,path)
            if  flag:
                path.append(current)
                break
        if not flag:
            current.color=COLORS.white
        else:
            return True
    else:
        print(sucess,num,total_steps)
        current.color=COLORS.gray
        path.append(current)
        return True

def main():
    m=8
    n=8
    start=genId(m,n,1,1)
    g=genData(m,n)

    item=g.getSon(start)
    path=[]
    lvYou(m*n,item,1,path)
    print(====>>>>>,len(path))
    tt=[]
    for item in path:
        print(item)
    
main()

 

基本算法3

原文:https://www.cnblogs.com/testzcy/p/12366216.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!