[PIPython] grafo città

toniko toniko
Lun 25 Apr 2005 22:06:37 CEST


ciao,
seguendo i consigli di paoo conte ho fatto questo
######
class block:
    def __init__(self,name):
        self.name=name
        self.vicini={}
        #self.confini='N','O','S','E'
        self.coo=[0,0]

    def addVicini(self,direz,nodo):
        if not self.vicini.has_key(direz):
            self.vicini[direz]=nodo
        else:
            print "ERROR duplicate"

    def getVicini(self):
        d={}
        for (k,v) in self.vicini.items():
            d[k]=v.name
        return d

    def setPosConf(self):
        for (k,v) in self.vicini.items():
            if k=='N' :
                v.coo=[self.coo[0],self.coo[1] + 10]
            if k=='S':
                v.coo=[self.coo[0],self.coo[1] - 10]
            if k=='O':
                v.coo=[self.coo[0]+ 10,self.coo[1]]
            if k=='E':
                v.coo=[self.coo[0] -10,self.coo[1]]
            v.setPosConf()

    def setCoo(self,pos):
        self.coo=[pos[0],pos[1]]

    def getCoo(self):
        return self.coo


if __name__=='__main__':
    b0,b1,b2,b3,b4,b5=block(0),block(1),block(2),block(3),block(4),block(5)
    b0.addVicini('N',b1)
    b0.addVicini('S',b2)
    b0.addVicini('E',b3)
    b0.addVicini('O',b4)
    b1.addVicini('N',b5)
    b0.setPosConf()
    print 
b0.getCoo(),b1.getCoo(),b2.getCoo(),b3.getCoo(),b4.getCoo(),b5.getCoo()
###
Output
[0, 0] [0, 10] [0, -10] [-10, 0] [10, 0] [0, 20]

come mi aspettavo cioè b5 che sta a nord di b1 che sta a nord di b0,  ha 
coordinate  [0,20]

vorrei applicare il fatto che se aggiungo ad un nodo 'A'  un nodo 
confinante a 'nord'  'B' automaticamente il nodo confinante a 'sud' per 
B deve essere 'A':
ho fatto diverse  prove ma l'errore è sempre lo stesso:
RuntimeError: maximum recursion depth exceeded
cioè cade in un loop infinito
ora come ho cercato di applicare la reciproca confinanza:
se nel __main__ metto:
b0.addVicini('N',b1)
b1.addVicini('S',b0)
mi da subito errore

ho provato a modificare addVicini in questo modo:
    def addVicini(self,direz,nodo):
        if not self.vicini.has_key(direz):
            self.vicini[direz]=nodo
        else:
            print "ERROR duplicate"
        if direz=='N':
                nodo.vicini['S']=self
        if direz=='S':
                nodo.vicini['N']=self
        if direz=='O':
                nodo.vicini['E']=self
        if direz=='E':
                nodo.vicini['O']=self

e mi da lo stesso errore
il bello è che se non gli faccio fare la ricorsione setPosConf
lui giustamente quando gli dico
b0.addVicini('N',b1)
aggiunge al confine SUD di b1, b0
quindi l'errore sarà nella funzione ricorsiva?

qualcuno sa dirmi dove sta l'inghippo?
infinite grazie a ki mi da una mano
tonio
 
 
 --
 Email.it, the professional e-mail, gratis per te: http://www.email.it/f
 
 Sponsor:
 Web Marketing: impara tutti i segreti del Posizionamento sui Motori di
* Ricerca, Pubblicita' on-line, Email Marketing  - clicca qui
 Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=3213&d=25-4


More information about the Python mailing list