рд▓рдХреНрд╖реНрдп рдЦреЛрдЬрдиреЗ рдХреЗ рддрд░реАрдХреЗред рдореМрдХрд╛ рдХреА рднреВрдорд┐рдХрд╛

1. рдкрд░рд┐рдЪрдп


рдЦреЛрдЬ рдпрд╛ рддреЛ рдЬрдЯрд┐рд▓ рдпрд╛ рд╕рд░рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬрдм рд▓рдХреНрд╖реНрдп (рдпрд╛ рдХреЗрд╡рд▓ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд) рджреЛрдиреЛрдВ рд╣реА рд▓рдХреНрд╖реНрдп рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореМрдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ

рдЕрдиреБрд╕рдВрдзрд╛рди рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд▓рдХреНрд╖реНрдп рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдЪрд▓рддреА (рдкреАрд▓реА рд╡рд╕реНрддреБ), рдФрд░ рдЧрддрд┐рд╣реАрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдирд╛ рд╣реИред

рдпреЗ рддрд░реАрдХреЗ:

  • рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ (рд▓рд╛рд▓ рд╡рд╕реНрддреБ)
  • рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ (рдиреАрд▓реА рд╡рд╕реНрддреБ)
  • рд╕реНрдореГрддрд┐ рдФрд░ рдкрджрд╛рдиреБрдХреНрд░рдо (рд╣рд░реА рд╡рд╕реНрддреБ) рдХреЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ
  • рдкрд╣рд▓рд╛ рдорд╛рд░реНрдЧ рдЦреЛрдЬреЗрдВ (рдмреИрдВрдЧрдиреА рд╡рд╕реНрддреБ)
  • рдПрдХ рдЫреЛрдЯрд╛ рдорд╛рд░реНрдЧ рдЦреЛрдЬреЗрдВ (рднреВрд░реА рд╡рд╕реНрддреБ)

рдЪрд┐рддреНрд░ 1 рдореЗрдВ, рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдЧрд┐рдердм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛



2. рдореБрдЦреНрдп рднрд╛рдЧ


2.1ред рдХрдХреНрд╖рд╛ рдкреА - рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЪрд░ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ: рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ, рд░рдВрдЧ, y рдФрд░ x рд╕рдордиреНрд╡рдп, рдХрд╛рдЙрдВрдЯрд░, рд╡рд┐рдЬрд╝рд┐рдЯ рдХрд┐рдП рдЧрдП рд╢рдмреНрджрдХреЛрд╢, рд▓рдХреНрд╖реНрдп, рдкрджрд╛рдиреБрдХреНрд░рдо рд╢рдмреНрджрдХреЛрд╢, рдкрдбрд╝реЛрд╕реА рд╢рдмреНрджрдХреЛрд╢ред Init_3_dict рдкрджреНрдзрддрд┐ рддреАрди рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рдЖрдмрд╛рдж рдХрд░рддреА рд╣реИред рд╢реЛ рд╡рд┐рдзрд┐ рд╕реЗрд▓ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд░рдВрдЧ рдореЗрдВ рдкреЗрдВрдЯ рдХрд░рддреА рд╣реИред рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреА рд╣реИред Top_show рд╡рд┐рдзрд┐ рдПрдХ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╡рд┐рдВрдбреЛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдЪрд░рдг рд╣реИрдВред

class P(): def __init__(self, root, color, node, target, maps, ban): self.root = root self.color = color self.y = node[0] self.x = node[1] P.target = target self.count = 0 self.visit = {} P.hierarchy = {} P.neighbor = {} self.init_3_dict(maps, ban) 

In__ рдлрд╝рдВрдХреНрд╢рди рдХреЛ init_3_dict рдкрджреНрдзрддрд┐ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рд╕рдордиреНрд╡рдп рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдирдХреНрд╢реЗ рд╕реЗ рдкрд░реЗ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред

 def init_3_dict(self, maps, ban): def is_en(yx): if yx[0] < 0 or yx[0] > len(maps)-1: return if yx[1] < 0 or yx[1] > len(maps[0])-1: return if yx in ban: return return True 

рдПрдХ рдЪрдХреНрд░ рдореЗрдВ, рд╕рдордиреНрд╡рдп рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЧрдП рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рд╢реВрдиреНрдп рд▓рд┐рдЦреЗрдВред рдПрдХ рд╣реА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдкрджрд╛рдиреБрдХреНрд░рдо рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ, рдЗрд╕ рд╕рдордиреНрд╡рдп рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдирд╛рдо рд▓рд┐рдЦреЗрдВред рдлрд┐рд░ рд╣рдо is_en рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рднрд░рддреЗ рд╣реИрдВред

 for y in range(len(maps)): for x in range(len(maps[0])): self.visit[(y,x)] = 0 P.hierarchy[(y,x)] = maps[y][x] n = [] if is_en((y-1,x)): n.append((y-1,x)) if is_en((y+1,x)): n.append((y+1,x)) if is_en((y,x-1)): n.append((y,x-1)) if is_en((y,x+1)): n.append((y,x+1)) P.neighbor[(y,x)] = n 

рд╢реЛ рд╡рд┐рдзрд┐ рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрд▓ рдкреЗрдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдПрдХреНрд╕ рд╡рд╛рдВрдЫрд┐рдд рд░рдВрдЧ рдореЗрдВ рд╕рдордиреНрд╡рдп рдХрд░рддрд╛ рд╣реИред

 def show(self, y, x, color): lb = Label(text=" ", background = color) lb.configure(text=P.hierarchy[(y,x)] ) lb.grid(row=self.y, column=self.x, ipadx=10, ipady=5, padx=1, pady=1) 

рдЪрд╛рд▓ рд╡рд┐рдзрд┐ рд╡рд╕реНрддреБ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреА рд╣реИред рдЪрд░ y рдореЗрдВ, x рд╣рдо рдкрдбрд╝реЛрд╕реА рдХреЗ рд╕рдордиреНрд╡рдп рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдирдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВред

рд╣рдо рдХрд╛рдЙрдВрдЯрд░ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рддреЛ рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдХреНрд╖рд╛ J.disable рдХреЗ рдЪрд░ рдореЗрдВ рд╣рдо рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╣рдо top_show () рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВред

 def move(self): v = [] for i in P.neighbor[(self.y, self.x)]: v.append(i) y,x = random.choice(v) self.show(self.y, self.x, 'white') self.y = y self.x = x self.show(y, x, self.color) self.count +=1 if P.target == P.hierarchy[(self.y, self.x)]: J.disable = True self.top_show() 

рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдЪрд╛рд▓ рдФрд░ рдЕрджреНрдпрддрди рд╣рд░ рдЖрдзреЗ рд╕реЗрдХрдВрдб рдореЗрдВред

 def update(self): self.move() self.root.after(500, self.update) 

рд╢реАрд░реНрд╖_рд╢реЛ рд╡рд┐рдзрд┐ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред

 def top_show(self): top = Toplevel() lbt = Label(top, text=self.color + " = " + str(self.count)) lbt.pack() top.mainloop() 

2.2ред рдХреНрд▓рд╛рд╕ рдПрдо - рд░реИрдВрдбрдо рдореЗрдореЛрд░реА рд╕рд░реНрдЪ

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдкреИрд░реЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рдо рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕ рд╕реЗрд▓ рдХреА рд╡реИрд▓реНрдпреВ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдЪрд╛рд▓ рд╡рд┐рдзрд┐ рд╡рд╕реНрддреБ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреА рд╣реИред рдЪреБрдирд╛рд╡ рд╡рд┐рдзрд┐ рдЙрд╕ рд╕рдордиреНрд╡рдп рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдиреЗ рдЪреБрдирд╛ рд╣реИред

рдЪрд╛рд▓ рд╡рд┐рдзрд┐ рдореЗрдВ, рдкрд╕рдВрдж рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рдЙрд╕рдХрд╛ рдХрд╛рдо рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИред

 def move(self): yx = self.choice((self.y, self.x)) 

рдкрд╕рдВрдж рдХреА рд╡рд┐рдзрд┐ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╣реЛрддреА рд╣реИ рдФрд░ рд╕реВрдЪреА v рдореЗрдВ tuples рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рдЯрдкрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рдкрдбрд╝реЛрд╕реА рдХрд╛ рд╕рдордиреНрд╡рдп рд╣реЛрдЧрд╛, рджреВрд╕рд░рд╛ - рдЗрд╕реЗ рдХрд┐рддрдиреА рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдЫреЛрдЯреЗ рд╕реЗ рдмрдбрд╝реЗ рддрдХ рдЫрдБрдЯрддреЗ рд╣реИрдВред рд╣рдо рд╕рднреА tuples рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реВрдЪреА v рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдЯреНрдпреВрдкрд▓ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдереЗред рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред

 def choice(self, yx): v = [] for i in P.neighbor[yx]: v.append((i, self.visit[i])) v.sort(key = lambda x: x[1], reverse = False) v = [i for i in v if v[0][1] == i[1]] v = random.choice(v) self.visit[v[0]] += 1 return v[0] 

2.3ред рдХрдХреНрд╖рд╛ рдПрди - рд╕реНрдореГрддрд┐ рдФрд░ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬред

рдкрд╕рдВрдж рд╡рд┐рдзрд┐ рдЙрди рдЯреБрдкрд▓реНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рддреА рд╣реИ рдЬреЛ рд▓рдХреНрд╖реНрдп рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдирд╛рдо рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдореИрдЪ рд╕рдорд╛рди рд╣реИ, рддреЛ рдХрдо рд╕реЗ рдХрдо рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЪреБрдиреЗ рдЧрдП рд╣реИрдВред

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдпреЛрдЧ рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд░рддрд╛ рд╣реИ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдирд╛рдо рдХреЗ рдЪрд░рд┐рддреНрд░ рдорд┐рд▓рд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред

 def __init__(self, root, color, node, target, maps, ban): super().__init__(root, color, node, target, maps, ban) self.coincidence = 0 

рд▓реВрдк рдореЗрдВ рдкрд╕рдВрдж рд╡рд┐рдзрд┐ рдкрдбрд╝реЛрд╕реА рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдордиреНрд╡рдп рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдирд╛рдо рд▓рд┐рдЦрддреА рд╣реИред рд╡реЗрд░рд┐рдПрдмрд▓ рдЖрд░ рдЗрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдореИрдЪреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдорд╛рдЪ r рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╕рдВрдпреЛрдЧ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕реВрдЪреА v рд╕реЗ tuple (рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рд╡рд┐рдЬрд╝рд┐рдЯ рдХреА рд╕рдВрдЦреНрдпрд╛) рд╕реВрдЪреА d рдкрд░ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ r рд╕рдВрдпреЛрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ d рдореЗрдВ рд╣рдо v рд╕реЗ рдПрдХ tuple рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

 def choice(self, yx): v = [] for i in P.neighbor[yx]: v.append((i, self.visit[i])) d = [] for l in v: c = P.hierarchy[l[0]] r = 0 for i in range(len(P.target)): if c[i] == P.target[i]: r +=1 else: break if r > self.coincidence: self.coincidence = r d = [l] if r == self.coincidence: d.append(l) if d: v = d v.sort(key = lambda x: x[1], reverse = False) v = [i for i in v if v[0][1] == i[1]] v = random.choice(v) self.visit[v[0]] += 1 return v[0] 

2.4ред рдХрдХреНрд╖рд╛ K - рдПрдХ рдорд╛рд░реНрдЧ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ рдФрд░ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдорд╛рд░реНрдЧ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВред

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдВрдд рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрдВрдд рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд▓рд┐рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдЫреЛрдЯрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЧрд▓рдд рд╣реИ, рддреЛ рд╣рдо рдорд╛рд░реНрдЧ рдЦреЛрдЬ рдХрд╣рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рд╣рдо рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдорд╛рд░реНрдЧ рдкрд╛рддреЗ рд╣реИрдВред

рдЦреЛрдЬ_рдкрде рд╡рд┐рдзрд┐ рд╡рд░реНрддрдорд╛рди рд╕рдордиреНрд╡рдп рдХреЛ рдорд╛рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИред рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдорд╛рд░реНрдЧ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╕рднреА рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдорд╛рд░реНрдЧ рдореЗрдВ рдХреЛрдИ рдкрдбрд╝реЛрд╕реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╣реЗрдВред рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рд░рд┐рдЯрд░реНрди рдирдПрдкрде рдкрд░ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИред рдкрд╛рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдорд╛рд░реНрдЧ рдирдпрд╛рдкрде рд╣реЛрдЧрд╛ред Find_short_path рд╡рд┐рдзрд┐ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ newpath рдХреА рд▓рдВрдмрд╛рдИ рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 def find_path(self, node, end, path=[]): path = path + [node] if node == end: return path for v in P.neighbor[node]: if v not in path: newpath = self.find_path(v, end, path) if newpath: return newpath 

2.5ред рдХрдХреНрд╖рд╛ рдЬреЗ рдПрдХ рдЪрд▓рддреА рд▓рдХреНрд╖реНрдп рд╣реИред

рдХреНрд▓рд╛рд╕ J рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ P рдХреА рддрд░рд╣ рдЪрд▓рддрд╛ рд╣реИред рдпрджрд┐ рдХреНрд▓рд╛рд╕ J.disable рдХрд╛ рд╡реЗрд░рд┐рдПрдмрд▓ рд╕рд╣реА рд╣реИ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

2.6ред рдореБрдЦреНрдп рдХрд╛рд░реНрдпред

рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдБред рд▓рдХреНрд╖реНрдп рдЪрд░ рдореЗрдВ, рд▓рдХреНрд╖реНрдп рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдирд╛рдо рд▓рд┐рдЦреЗрдВред рдкреНрд░рддрд┐рдмрдВрдз рд╕реВрдЪреА рдореЗрдВ рдирд┐рд╖рд┐рджреНрдз рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдирдХреНрд╢реЗ рдХреА рд╕реВрдЪреА рдореЗрдВ, рдирдХреНрд╢рд╛ рд╣реАред рд▓реВрдк рдореЗрдВ рд╣рдо рдПрдХ рдирдХреНрд╢рд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБред рдлрд┐рд░ рд╣рдо рдЕрдкрдбреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред

3. рдирд┐рд╖реНрдХрд░реНрд╖


рдЧрддрд┐рдорд╛рди рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдФрд░ рдЧрддрд┐рд╣реАрди рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдБрдЪ рдкреНрд░рдпреЛрдЧ рдХрд┐рдП рдЧрдПред

рддрд╛рд▓рд┐рдХрд╛ 1 рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдорд╛рд░реНрдЧ рд╣реИред рджреВрд╕рд░реА рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╕реНрдореГрддрд┐ рдФрд░ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ рд╣реИред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ рд╣реИред

рддрд╛рд▓рд┐рдХрд╛ 1. рдирд┐рд╢реНрдЪрд┐рдд рд▓рдХреНрд╖реНрдп

рдЫрд╡рд┐

рдПрдХ рдЪрд▓рддреА рд▓рдХреНрд╖реНрдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдЕрд▓рдЧ рд╣реИрдВред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╡реЗ рдереЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╢реБрд░реВ рдореЗрдВ рд▓рдХреНрд╖реНрдп рдХреЗ рдорд╛рд░реНрдЧ рдХреА рдЧрдгрдирд╛ рдХреАред рддрд╛рд▓рд┐рдХрд╛ 2 рдореЗрдВ, рдПрдХ рдбреИрд╢ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдмреНрд░рд╛рдЙрди рд╡рд╛рдпрд▓реЗрдЯ рд╕реЗ рднреА рдмрджрддрд░ рдирд┐рдХрд▓рд╛ред рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рдпрд▓реЗрдЯ рдХреЗ рдкрд╛рд╕ рд▓рдВрдмрд╛ рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░ рд╣реИ (рдПрдХ рдмрдврд╝рддреЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдЕрдзрд┐рдХ рд╣реИ)ред рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд▓рдХреНрд╖реНрдп рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрдореГрддрд┐ рдФрд░ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ рд╣реИред рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ рд╣реИред

рддрд╛рд▓рд┐рдХрд╛ 2. рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рдг

рдЫрд╡рд┐

рдпрджрд┐ рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рдмрдврд╝ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рддреЛ рд╕реНрдореГрддрд┐ рдФрд░ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╛ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

4. рдирд┐рд╖реНрдХрд░реНрд╖


рдпрджрд┐ рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рдХреНрд╖реНрдп рдХреА рддрд▓рд╛рд╢ рд╣реЛрддреА рд╣реИ рддреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрджрд┐ рдбреЗрдЯрд╛ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЦреЛрдЬ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╕реНрдореГрддрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореВрд▓реНрдпрд╡рд╛рди рд╣реИред

Source: https://habr.com/ru/post/hi479414/


All Articles