[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