fork(2) download
  1. class V(object):
  2. def __init__(self, address):
  3. self.address = address # adres tego kompa
  4. self.h = [] # lista sasiadow
  5. self.status = 0 # do BFSa
  6.  
  7. def add_h(self, h): # dodaje obiekt wierzcholka do siasiadow
  8. if h not in self.h:
  9. self.h.append(h)
  10.  
  11. def set_status(self, s): # zmienia status tego wierzcholka
  12. self.status = s
  13.  
  14. def check_h(self, looking_for): # sprawdza swoich sasiadow pod katem pasujacego adresu
  15. self.status = 1
  16. for v in self.h:
  17. if v.status == 0:
  18. if v.address == looking_for:
  19. return True
  20. if v.check_h(looking_for) == True:
  21. return True
  22. return False
  23.  
  24. class Graph(object):
  25. def __init__(self):
  26. self.v = []
  27.  
  28. def add(self, v): # dodaje obiekt wierzcholka do wierzcholkow grafu
  29. if v not in self.v:
  30. self.v.append(v)
  31.  
  32. def get(self, v): # zwraca wierzcholek o podanym adresie
  33. for i in self.v:
  34. if i.address == v:
  35. return i
  36.  
  37. def add_connection(self, u, v): # dla podanych adresow tworzy polaczenie
  38. if not self.get(u):
  39. self.add(V(u))
  40.  
  41. if not self.get(v):
  42. self.add(V(v))
  43.  
  44. uu = self.get(u)
  45. vv = self.get(v)
  46.  
  47. uu.add_h(vv)
  48. vv.add_h(uu)
  49.  
  50. def test(self, u, v): # sprawdza czy istnieje polaczenie miedzy danymi adresami
  51. for i in self.v:
  52. i.set_status(0)
  53. if self.get(u):
  54. return self.get(u).check_h(v)
  55. return False
  56.  
  57. ins = [
  58. 'B 100.100.100.1 100.100.100.2',
  59. 'B 100.100.100.1 100.100.100.3',
  60. 'B 100.100.100.10 100.100.100.11',
  61. 'T 100.100.100.1 100.100.100.3',
  62. 'T 100.100.100.10 100.100.100.2',
  63. 'T 100.100.100.10 100.100.100.11',
  64. 'B 100.100.100.11 100.100.100.2',
  65. 'T 100.100.100.10 100.100.100.3',
  66. 'T 100.100.100.100 100.100.100.103'
  67. ]
  68. g = Graph()
  69.  
  70. for line in ins:
  71. line = line.strip().split()
  72. if line[0] == 'T':
  73. print 'T' if g.test(line[1], line[2]) else 'N'
  74. else:
  75. g.add_connection(line[1], line[2])
  76.  
  77.  
Success #stdin #stdout 0.01s 7852KB
stdin
Standard input is empty
stdout
T
N
T
T
N