Advertisement
2Susan2

Untitled

Jun 4th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.45 KB | None | 0 0
  1. class Zahradka:
  2.     #{vrchol1:{sused1: ovocie, sused2:ovocie}, vrchol2:...}
  3.    
  4.     def __init__(self, meno_suboru):
  5.         self.g = {}
  6.         self.vsetko_ovocie = set()
  7.        
  8.         with open(meno_suboru, 'r') as subor:
  9.             for riadok in subor:
  10.                 riadok = riadok.strip().split()
  11.  
  12.                 if len(riadok) == 2:
  13.                     v1 = riadok[0]
  14.                     ovocie = ''
  15.                     v2 = riadok[1]
  16.                 else:
  17.                     v1 = riadok[0]
  18.                     ovocie = riadok[1]
  19.                     self.vsetko_ovocie.add(ovocie)
  20.                     v2 = riadok[2]
  21.  
  22.                 self.g.setdefault(v1, {})[v2] = ovocie #ak v1 este nie je v self.g, nastavim mu hodnotu {} a potom pridam v2
  23.                 self.g.setdefault(v2, {})[v1] = ovocie
  24.                
  25.         #print(self.g)
  26.  
  27.     def vrcholy(self):
  28.         return set(self.g.keys())              # vrati mnozinu alebo postupnost vrcholov
  29.  
  30.     def hrana(self, v1, v2):   # vrati retazec alebo None
  31.         if v2 not in self.g[v1]:
  32.             return None
  33.         return self.g[v1][v2]
  34.        
  35.  
  36.     def typy_ovocia(self):
  37.         return self.vsetko_ovocie            # vrati mnozinu alebo postupnost mien ovocia
  38.  
  39.     def start(self, v1):
  40.         self.vysledok = []
  41.         self.visited = set() #obsahuje hrany - n-tice
  42.         self.hodnoty = set() #obsahuje "navstivene" ovocie
  43.         self.backtracking(v1, [v1])
  44.                
  45.         return self.vysledok              # vrati postupnost vrcholov cesty alebo []
  46.  
  47.     def backtracking(self, vrchol, cesta): #do cesty budem pridavat vrcholy
  48.         if len(self.hodnoty) == len(self.vsetko_ovocie): #skoncim ked pozbieram vsetko ovocie
  49.             self.vysledok = cesta[:]
  50.             return
  51.  
  52.         for sused in self.g[vrchol]:
  53.             hodnota_hrany = self.g[vrchol][sused]
  54.  
  55.             if (vrchol, sused) not in self.visited and hodnota_hrany not in self.hodnoty:
  56.                 self.visited.add((vrchol, sused))
  57.                 self.visited.add((sused, vrchol))
  58.  
  59.                 if hodnota_hrany != '':
  60.                     self.hodnoty.add(hodnota_hrany)
  61.                 #print(hodnota_hrany)
  62.                 self.backtracking(sused, cesta+[sused])
  63.  
  64.                 self.visited.remove((vrchol, sused))
  65.                 self.visited.remove((sused, vrchol))
  66.                 if hodnota_hrany != '':
  67.                     self.hodnoty.remove(hodnota_hrany)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement