
рдПрдХ рдУрд▓рдВрдкрд┐рдпрд╛рдб рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд▓реЗрдмрд┐рд░рд┐рдВрде рдФрд░ рдЙрдирдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреА рдкреАрдврд╝реА рдХреЗ рдШреБрдорд╛рд╡рджрд╛рд░ рдЧрд▓рд┐рдпрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рд╣рдо рдпрд╣ рднреА рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕рдХреЗ рдЫрджреНрдо рдХреЛрдб рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕рд╛рджрдЧреА рд╣реИред
рдХрд╛рд░реНрдп
рднреВрд▓рднреБрд▓реИрдпрд╛ 10 рд╕реЗ 10 рд╕реЗ 10 рдХрд╛ рдПрдХ рдЪреЗрдХрд░ рд╡рд░реНрдЧ рд╣реИ, рдХреБрдЫ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдмрд╛рдзрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдПрдХ рд╕реЗрд▓ рдореЗрдВ рдПрдХ рдирд┐рдХрд╛рд╕ рд╣реИред рд░реЛрдмреЛрдЯ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрдХреНрд░рд╡реНрдпреВрд╣ рдореЗрдВ рд╣реИ рдФрд░ 4 рдХрдорд╛рдВрдб рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рд╕реЗрд▓ рдХреЛ рдиреАрдЪреЗ, рдКрдкрд░, рджрд╛рдПрдВ рдпрд╛ рдмрд╛рдПрдВ рдШреБрдорд╛рдПрдВред рдпрджрд┐ рд░реЛрдмреЛрдЯ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рдпрд╛ рдПрдХ рдмрд╛рдзрд╛ рдХреЗ рд╕рд╛рде рдкрд┐рдВрдЬрд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬрдЧрд╣ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдпрджрд┐ рд░реЛрдмреЛрдЯ рдирд┐рдХрд╛рд╕ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рднреВрд▓рднреБрд▓реИрдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ рдФрд░ рдЖрдЧреЗ рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддрд╛ рд╣реИред рд░реЛрдмреЛрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВ, рдЬрд┐рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реБрдП рд░реЛрдмреЛрдЯ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рд╕реЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрдерд┐рдд рдерд╛ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ 1000 рд╕реЗ рдЕрдзрд┐рдХ рдЯреАрдо рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдХреЛрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рднреВрд▓рднреБрд▓реИрдпрд╛ред
рднреВрд▓рднреБрд▓реИрдпрд╛ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕реЗ рдЖрдк рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред 0 - рдореБрдХреНрдд рд╕реЗрд▓, 1 - рдмрд╛рдзрд╛, x -
рд░рд╛рд╕реНрддрд╛ рдирд┐рдХрд╛рд▓рдирд╛ред
0011010011 0100001000 0110x00000 0010000100 0000111000 0000100100 0000010010 0100101010 0011001010 1000011000
рдПрдХ рд▓рд╛рдЗрди рдЬрд┐рд╕рдореЗрдВ U, D, R, L рдХреА рд▓рдВрдмрд╛рдИ 1000 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдЬреЛ рд▓реЛрдЧ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ рдЙрдиреНрд╣реЗрдВ рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
using Pkg Pkg.add("Plots") Pkg.add("Colors") Pkg.add("Images") Pkg.build("Images")
рдпрд╣ рдЬреБрдкрд┐рдЯрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рд╕реАрдзреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ рдЖрдк рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╕рд╛рде рд╣реА рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдЪрдп рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рд▓рд┐рдП рднреВрд▓рднреБрд▓реИрдпрд╛ рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ
S0 = "0011010011 0100001000 0110x00000 0010000100 0000111000 0000100100 0000010010 0100101010 0011001010 1000011000"
рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рди рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ:
S1 = prod(s-> s*' ', '['*S0*']')
рдПрдХ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдЕрдЬреАрдм рдЕрдХреНрд╖рд░ x рдХреЛ рдмрджрд▓рдирд╛ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛, рд╣рдореЗрдВ рдПрдХ рднреВрд▓рднреБрд▓реИрдпрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд▓реЛрдЧреЛрдВ рдХреЛ рд╢реВрдиреНрдп рдореЗрдВ рдмрджрд▓реЗрдВ, рдФрд░ рд╢реВрдиреНрдп рдХреЛ рд▓реЛрдЧреЛрдВ рдХреЛ, рдФрд░ рдПрдХ рджреАрд╡рд╛рд░ рдкрд░ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ:
S2 = replace(S1, 'x'=>'9') M0 = S2 |> Meta.parse |> eval m,n = size(M0) M1 = replace(M0, 1=>0, 0=>1) M = zeros(Int64,m+2,n+2) for i in 2:m+1, j in 2:n+1 M[i,j] = M1[i-1,j-1] end M
рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ
length(M) 144
рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдФрд░ рдЙрдирд╕реЗ
sum(M)-9 70
рдЬрд┐рд╕ рдкрд░ рдЖрдк рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ - рд╕рдВрднрд╛рд╡рд┐рдд рд╢реБрд░реБрдЖрддреА рд╕реНрдерд┐рддрд┐ред рдЖрдк рджреЛ-рдЖрдпрд╛рдореА рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
using Plots heatmap(M, yaxis = :flip)

рд╕рдорд╛рдзрд╛рди рд╕рддреНрдпрд╛рдкрди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗред рдмрд┐рдВрджреБрдУрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ Point
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:
mutable struct Point x::Int64
рдФрд░ рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдХреЛрдб рдореЗрдВ рд░реЛрдмреЛрдЯ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдордиреНрд╡рдп рд╣реИ, рдПрдХ рд░реЗрдЦрд╛ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рдЖрддреА рд╣реИ рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЪрд▓рдирд╛ рд╣реИред рд╣рдо рдПрдХ рдЪрд┐рдЯреНрдареА рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрдбрд╝реЛрд╕реА рдХреА рдХреМрди рд╕реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕ рд╕реЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдп рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╢реВрдиреНрдп (рджреАрд╡рд╛рд░) рд╣реИ, рддреЛ рд╣рдо рдХрд╣реАрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдордиреЗ рдЖрд╡рд╢реНрдпрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдХрджрдо рдЙрдард╛рдпрд╛ рд╣реИред
рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рднрд╛рд░реА, рд╕рдорд╛рди рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
S = "RRLDUURULDDRDDRRRUUU" S1 = replace(S , "R"=>"c.y+=M[cx, c.y+1];") S1 = replace(S1, "L"=>"cy-=M[cx, cy-1];") S1 = replace(S1, "U"=>"c.x+=M[c.x+1, cy];") S1 = replace(S1, "D"=>"cx-=M[cx-1, cy];")
рд▓реЗрдХрд┐рди рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдХрдИ рдЕрд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╢рд╛рд╕реНрддреНрд░реАрдп рд╕рд╢рд░реНрдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╡реИрд╕реЗ, рдпрд╣ рддрдереНрдп рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рдВрдЦреНрдпрд╛ 9 рд╕реЗ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдЫреЛрдЯреА рд╕реА рдЪрд╛рд▓ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд░рд╛рд╕реНрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдорд╛рди рдЬреЛрдбрд╝рдХрд░ рдЖрдВрджреЛрд▓рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд░реЛрдмреЛрдЯ рдирд┐рдХрд╛рд╕ рдкрд░ рдХрджрдо рд░рдЦрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЙрд╕рдХреЗ рд╕рдордиреНрд╡рдп рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд░реЛрдмреЛрдЯ рд╕рд░рдгреА рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рдЙрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдХрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
try
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд c
рд░реЛрдмреЛрдЯ рдмрд┐рдВрджреБ c
рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдХрд╛рд╕ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ:
function isexit(str, c) scatter!([cy],[cx]) try for s in str if s == 'R' c.y+=M[cx, c.y+1]; elseif s == 'L' cy-=M[cx, cy-1]; elseif s == 'U' c.x+=M[c.x+1, cy]; elseif s == 'D' cx-=M[cx-1, cy]; else println("Error! Use only R, L, U, D") end end catch return true end return false end
рдЖрдЗрдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдЬреЛ рд╕рднреА рд╢реБрд░реБрдЖрддреА рдкрджреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░реЗрдЧрд╛
function test(Str) k = 0 for i in 2:m+1, j in 2:n+1 if M[i,j] == 1 c = Point(i, j) a = isexit(S,c) if a k +=1
рдЖрджреЗрд╢реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
S = "RRRLDUUURRRUUURRRRLLLRRUULDDDDRRRRDDDRRRUUU" heatmap(M, yaxis = :flip) test(S)

рд╕рднреА рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдХреЗрд╡рд▓ 10 рдиреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рд╕реЗ рдирд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдкреАрдврд╝рд┐рдпреЛрдВ рдХреА рдкреАрдврд╝реА рдФрд░ рдорд╛рд░реНрдЧ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмрдЪрд╛рдПрдВрдЧреЗред рд╣рдо Images.jl рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг (рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг ) рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрдИ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрдирдХрд╛ рдПрдХ рд╕рд╣рд╛рдпрдХ рдЙрдкрдХрд░рдг Colors.jl рдкреИрдХреЗрдЬ рд╣реИ, рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред
using Images clrs(x) = x==9 ? RGB(1.,0.5,0) : RGB(x,x,x) maze = clrs.(M)

рдЧрд╣рд░рд╛рдИ рдЦреЛрдЬ
рд╣реИрдмрд░ рдкрд░ рдПрдХ рд▓реЗрдЦ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ: рджреАрд╡рд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЧреНрд░рд┐рдб рдмрдирд╛рдПрдВ
M = 10 N = 10 A = [ i&j&1 for i in 0:N, j in 0:M ]

рдлрд┐рд░, рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдкрд┐рдВрдЧ, рд╣рдо рдорд╛рд░реНрдЧ рдФрд░ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкрдбрд╝реЛрд╕реА рдЧреИрд░-рдЕрдзрд┐рдХреГрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИ (рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкрджрдирд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╣реЗрдВрдЧреЗ), рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдкрдбрд╝реЛрд╕реА рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ (рдпрджрд┐ рдХреЛрдИ рдкрдбрд╝реЛрд╕реА рдкрдбрд╝реЛрд╕реА рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдлреНрд▓реИрдЧ-рдкреЙрдЗрдВрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ):
function neighbours2(A,p, n, m) nbrs = [Point(px, p.y+2),
рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрдВрдЧреЗ:
function breakwall(A, newp,oldp)
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
- рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрд▓ рдХреЛ рд╡рд░реНрддрдорд╛рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдЬрд╝рд┐рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
- рдЬрдмрдХрд┐ рдЕрдирд╡реАрдХреГрдд рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ
1. рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдиреЗ "рдкрдбрд╝реЛрд╕реА" рдХреА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреА рд╣реИ
1. рд╕реНрдЯреИрдХ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЛ рдкреБрд╢ рдХрд░реЗрдВ
2. рдкрдбрд╝реЛрд╕реА рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
3. рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдФрд░ рдЪрдпрдирд┐рдд рдХреЗ рдмреАрдЪ рдХреА рджреАрд╡рд╛рд░ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
4. рдЪрдпрдирд┐рдд рд╕реЗрд▓ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
2. рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ
1. рд╕реНрдЯреИрдХ рд╕реЗ рдкрд┐рдВрдЬрд░реЗ рдХреЛ рдЦреАрдВрдЪреЛ
2. рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВ
3. рдирд╣реАрдВ рддреЛ
1. рд░реИрдВрдбрдо рдЕрдирд╡рд┐рдЬрд┐рдЯ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЗрд╕реЗ рдХрд░рдВрдЯ рдХрд░реЗрдВ рдФрд░ рд╡рд┐рдЬрд┐рдЯ рдХреА рд╣реБрдИ рдЬрдЧрд╣ рдкрд░ рдорд╛рд░реНрдХ рдХрд░реЗрдВред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛрдб function amazeng(n, m) M = [ 2(i&j&1) for i in 0:n, j in 0:m ]; p = Point(2,2)
lbrnt = amazeng(36, 48)


рдкрде рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдердо:
- рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрд▓ рдХреЛ рд╡рд░реНрддрдорд╛рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдЬрд╝рд┐рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
- рдЬрдм рддрдХ рдХреЛрдИ рд╣рд▓ рдирд╣реАрдВ рдорд┐рд▓ рдЬрд╛рддрд╛
1. рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдиреЗ "рдкрдбрд╝реЛрд╕реА" рдХреА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреА рд╣реИ
1. рд╕реНрдЯреИрдХ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЛ рдкреБрд╢ рдХрд░реЗрдВ
2. рдкрдбрд╝реЛрд╕реА рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
3. рдЪрдпрдирд┐рдд рд╕реЗрд▓ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
2. рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ
1. рд╕реНрдЯреИрдХ рд╕реЗ рдкрд┐рдВрдЬрд░реЗ рдХреЛ рдЦреАрдВрдЪреЛ
2. рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВ
3. рдЕрдиреНрдпрдерд╛, рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рдо рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдФрд░ рдПрдХ рдХреЛрд╢рд┐рдХрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ:
function neighbours1(A, p, n, m) nbrs = [Point(px, p.y+1),
рдорд╛рд░реНрдЧ рдФрд░ рдЕрд╕рдлрд▓ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд╕рд╛рде рднреВрд▓рднреБрд▓реИрдпрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
function amazeng(img, start, exit) M = Float64.(channelview(img)) n, m = size(M) p = start M[exit.x,exit.y] = 1 lifo = [] push!(lifo, p) while px != exit.x || py != exit.y M[px,py] = 0.4 np = neighbours1(M, p, n, m) if np.x == np.y == 0 M[px,py] = 0.75 p = pop!(lifo)
рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рдиреЗ рджреЗрдЦрд╛ рд╣реИ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЙрддреНрдкрдиреНрди (рдПрдХрд╛рдзрд┐рдХ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ)ред рдЬрдм рдЖрдк рдЗрд╕реЗ рджреЛ рдирдВрдмрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЗрдореЗрдЬ рдФрд░ рджреЛ рдмрд┐рдВрджреБрдУрдВ (рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ) рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдореЗрдВ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ рдорд┐рд▓рддреА рд╣реИред
img0 = load("D:/dat/maze111.png") amazeng(img0)

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рднреВрд▓рднреБрд▓реИрдпрд╛ рдкрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
img0 = load("D:/dat/maze12x12.png") n, m = size(img0) amazeng(img0, Point(11,9), Point(4,6) )

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдорд╛рд░реНрдЧ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрднреА рднреА рдЦреБрд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЕрдкреНрд░рднрд╛рд╡реА рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдорд╛рдЬрд╝реЗ рдорд╣рд╛рди рдирд┐рдХрд▓рддреЗ рд╣реИрдВред
рдкреНрд░рд╛рдЗрдо рдХрд╛ рд░реИрдВрдбрдорд╛рдЗрдЬреНрдб рдЕрд▓реНрдЧреЛрд░рд┐рдердо
рдЬреИрд╕реЗ рд╣реА рдЖрдк рд▓реЗрдмрд┐рд░рд┐рдВрде рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рдмрдВрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЪрд▓реЛ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд░рддреЗ рд╣реИрдВ :
- рджреАрд╡рд╛рд░реЛрдВ рд╕реЗ рднрд░реЗ рдЧреНрд░рд┐рдб рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред
- рдПрдХ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЗрд╕реЗ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред рд╕реЗрд▓ рдХреА рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рджреАрд╡рд╛рд░ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
- рдЬрдмрдХрд┐ рд╕реВрдЪреА рдореЗрдВ рджреАрд╡рд╛рд░реЗрдВ рд╣реИрдВ:
- рд╕реВрдЪреА рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджреАрд╡рд╛рд░ рдЪреБрдиреЗрдВред рдпрджрд┐ рдХреЗрд╡рд▓ рджреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬрд┐рд╕реЗ рджреАрд╡рд╛рд░ рдХреЗ рд╢реЗрдпрд░реЛрдВ рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ:
- рджреАрд╡рд╛рд░ рдХреЛ рдПрдХ рдорд╛рд░реНрдЧ рдмрдирд╛рдПрдВ рдФрд░ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдХрд▓реНрдкрд┐рдд рд╕реЗрд▓ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
- рджреАрд╡рд╛рд░ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЖрд╕рдиреНрди рд╕реЗрд▓ рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред
- рджреАрд╡рд╛рд░ рдХреЛ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред
рдХреЛрдб neighbors(p::Point) = [Point(px, p.y+1),
primaze = prim(19,19); Gray.(primaze)

рдпрд╣ рдЕрдзрд┐рдХ рд╢рд╛рдЦрд╛ рдФрд░ рдХреЛрдИ рдХрдо рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ред
рдФрд░ рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдорд╛рд░реНрдЧ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдПрд▓реНрдЧреЛрд░рд┐рдердо рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
рд╡рд┐рдзрд┐ рдП *
- 2 рд╢реАрд░реНрд╖ рд╕реВрдЪреА рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ - рд▓рдВрдмрд┐рдд рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИред рд▓рдВрдмрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реБрд░реБрдЖрдд рдмрд┐рдВрджреБ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдм рддрдХ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ - рдмрд┐рдВрджреБ рд╕реЗ рд▓рдХреНрд╖реНрдп рддрдХ рдЕрдиреБрдорд╛рдирд┐рдд рджреВрд░реАред
- рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ, рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ ред рдЙрд╕реЗ рд░рд╣рдиреЗ рджреЛ ред
- рдЕрдЧрд░ - рд▓рдХреНрд╖реНрдп, рдлрд┐рд░ рд╣рдореЗрдВ рдорд╛рд░реНрдЧ рдорд┐рд▓рд╛ред
- рд╣рдо рдвреЛрддреЗ рд╣реИрдВ рд▓рдВрдмрд┐рдд рд╕реВрдЪреА рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╕реВрдЪреА рдореЗрдВред
- рдкреНрд░рддреНрдпреЗрдХ рдЖрд╕рдиреНрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП (рдЗрд╕ рдкрдбрд╝реЛрд╕реА рдмрд┐рдВрджреБ рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдВ ), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВ:
- рдЕрдЧрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ - рдЗрд╕реЗ рдЫреЛрдбрд╝реЗрдВред
- рдЕрдЧрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реВрдЪреА рдореЗрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ - рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВред
- рдпрджрд┐ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдВрдХреЛрдВ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд▓рдХреНрд╖реНрдп рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ, рддреЛ рдорд╛рд░реНрдЧ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо "рдмрд┐рдВрджреБ" рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рдЬрд╛рдиреЗрдЧрд╛ рдХрд┐ рдпрд╣ рд▓рдХреНрд╖реНрдп рд╕реЗ рдХрд┐рддрдиреА рджреВрд░ рд╣реИ:
mutable struct Point_h x::Int64
рдЕрдм рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рддреБрд▓рдирд╛ рдСрдкрд░реЗрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐, рд╕рд╛рде рд╣реА рдПрдХ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп, рдмрд┐рдВрджреБрдУрдВ рдФрд░ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛:
рджреВрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ import Base: in, == ==(a::Point_h, b::Point_h) = ax==bx && ay==by function in(p::Point_h, Arr::Array{Point_h,1}) for a in Arr if a == p return true end end return false end function splicemin!(Arr)
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЕрд╕реНрдкрд╖реНрдЯ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ?
рдЬреИрд╕реЗ ?splice
?argmin
рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд┐рдзрд┐ рдП * рд╣реА
рдХреЛрдб function astar(M, start, final)
рд╣рдо рдЪрд┐рддреНрд░ рдХреЛ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ:
img0 = load("D:/dat/maze0.png") mazematrix = Float64.(channelview(img0))
рдФрд░ рд╣рдо рдПрдХ рдордирдорд╛рдирд╛ рдмрд┐рдВрджреБ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ:
s = Point_h(11,9)

рд╕рднреА рдкрджреЛрдВ рдХреА рдПрдХ рдЦреЛрдЬ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рджреЗрдЦрд╛ рдХрд┐ рдПрдЬреЗрдВрдЯ рдкреНрд░реЗрдЯ рд╣рдореЗрд╢рд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдореГрдд рд╕рд┐рд░реЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрджрдореЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкреВрд░реЗ рдорд╛рд░реНрдЧ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдП * рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
- 2 рд╢реАрд░реНрд╖ рд╕реВрдЪреА рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ - рд▓рдВрдмрд┐рдд рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИред рд▓рдВрдмрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реБрд░реБрдЖрдд рдмрд┐рдВрджреБ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдм рддрдХ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ ред - рд╢реБрд░реВ рд╕реЗ рдмрд┐рдВрджреБ рддрдХ рдХреА рджреВрд░реА, - рдмрд┐рдВрджреБ рд╕реЗ рд▓рдХреНрд╖реНрдп рддрдХ рдЕрдиреБрдорд╛рдирд┐рдд рджреВрд░реАред рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдЙрд╕ рдмрд┐рдВрджреБ рдХрд╛ рд▓рд┐рдВрдХ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рд╡рд╣ рдЖрдпрд╛ рдерд╛ред
- рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ, рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ ред рдЙрд╕реЗ рд░рд╣рдиреЗ рджреЛ ред
- рдЕрдЧрд░ - рд▓рдХреНрд╖реНрдп, рдлрд┐рд░ рд╣рдореЗрдВ рдорд╛рд░реНрдЧ рдорд┐рд▓рд╛ред
- рд╣рдо рдвреЛрддреЗ рд╣реИрдВ рд▓рдВрдмрд┐рдд рд╕реВрдЪреА рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╕реВрдЪреА рдореЗрдВред
- рдкреНрд░рддреНрдпреЗрдХ рдЖрд╕рдиреНрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП (рдЗрд╕ рдкрдбрд╝реЛрд╕реА рдмрд┐рдВрджреБ рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдВ ), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВ:
- рдЕрдЧрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ - рдЗрд╕реЗ рдЫреЛрдбрд╝реЗрдВред
- рдЕрдЧрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реВрдЪреА рдореЗрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИ - рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВ, рд▓рд┐рдВрдХ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдФрд░ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ (рдпрд╣ рд╣реИ + рд╕реЗ рджреВрд░реА рдХреЛ ) рдФрд░ ред
- рдЕрдЧрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдореЗрдВ - рдпрджрд┐ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ + рд╕реЗ рджреВрд░реА рдХреЛ рддреЛ рд╣рдо рдореБрджреНрджреЗ рдкрд░ рдЖрдП рдХрдо рд░рд╛рд╕реНрддрд╛, рдЬрдЧрд╣ рдкрд░ + рд╕реЗ рджреВрд░реА рдХреЛ , рдФрд░ рдЬрд┐рд╕ рдмрд┐рдВрджреБ рд╕реЗ рд╡реЗ рдЖрдП рдереЗ рдкрд░ ред
- рдпрджрд┐ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдВрдХреЛрдВ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд▓рдХреНрд╖реНрдп рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ, рддреЛ рдорд╛рд░реНрдЧ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрджрдореЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛рд░реНрдп рдХреА рдмрд╛рдзрд╛ рдХреЗ рднреАрддрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЖрдкрдХрд╛ рд╣реЛрдорд╡рд░реНрдХ рд╣реЛрдЧрд╛ред
рдУрд▓рдВрдкрд┐рдпрд╛рдб рдХреЗ рдЕрдВрдд рддрдХ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж "RRLUUDL..."
рдЖрджреЗрд╢реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ "RRLUUDL..."
рдФрд░ рдЗрди рд╕рднреА рдХреЗ рдмрд╛рдж рдорд╛рдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдХрд▓реНрдк рдЕрднреА рднреА рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрдВрджрд░ рдЪреАрдЬреЗрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ ред
рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдХрд▓рд╛рдХрд╛рд░ рдХреЛ рдПрдХ рдЦреБрд▓реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдкрд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдЕрдкрдиреЗ рд╢реБрд░реБрдЖрддреА рд╕реНрдерд╛рди рдХреЗ рдкрд╛рд╕ рд╕рдВрдХреЛрдЪ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рджреАрд╡рд╛рд░реЛрдВ рдХреА рд╢реБрд░реВрдЖрдд рдХреЗ рд╕рд╛рде, рдХреБрдЫ рджрд┐рд╢рд╛рдПрдВ рдлреАрдХреА рдкрдбрд╝рдиреЗ рд▓рдЧреЗрдВрдЧреА, рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреА рдбрд┐рдЧреНрд░реА рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреА, рдФрд░ рдПрдХ рд╣реА рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде, рдПрдЬреЗрдВрдЯ рдЕрдзрд┐рдХ рджреВрд░реА рддрдп рдХрд░реЗрдЧрд╛ред
рдпрд╣рд╛рдБ рдПрдХ рднреВрд▓рднреБрд▓реИрдпрд╛ рд╕реЗ рд░реЛрдмреЛрдЯ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдЯреАрдореЛрдВ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:
рдХреЛрдб M = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 1 0 1 1 1 0 0 1 0 0 1 9 1 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0] mutable struct Point
рдЕрдм рдЬрдм рддрдХ рдХрд┐ рдЖрдк рд╕рднреА рдЖрд░рдВрднрд┐рдХ рдкрджреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рди рдХрд░ рд▓реЗрдВ, рддрдм рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓рд╛рдЗрдиреЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
using Random S = randstring("RLUD",200) "RDRRRDLRLUULURUDUUDLLLLLULLUDRRURDLDLULLRLUUUDURUUUULRUDUURUUDLRLLULRLUDRRLRRULLDULRRRRULRLLDULRLDRUDURDRUUDUUDDDDDLURRRRDRDURRRDDLLDUURRRLDRUDLRLLRDDRLRRRDDLLLRUURDRLURDLLUULLLLUURLLULUDULDDLDLLRLDUD" test(S) 41 test completed from 70
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдпрд╣ рдХрд╛рд░реНрдп рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛:
for i in 1:20 S = randstring("RLUD",1000) test(S) end 70 test completed from 70 70 test completed from 70 70 test completed from 70 70 test completed from 70 55 test completed from 70
рдпрд╛рдиреА 70% рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде, рд▓рд╛рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░реЗрдЧреАред
рд╡рд╣ рд╕рдм рд╣реИред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдкрд╛рдардХ рдХреЛ рдПрдХ рд╕рдлрд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛, рдзреИрд░реНрдп рдФрд░ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред
рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХреЗ рд▓рд┐рдП - рд╡рд┐рд╖рдп рдХреЛ рдЧрд╣рд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ: