рд╣рдо рдХрдХреНрд╖рд╛ рдХреЛ рдЧреНрд░рд╛рдл рдмреВрд╕реНрдЯ рдХреЗ рддрд╣рдд рдореБрдЦреМрдЯрд╛ рдХрд░рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВ


рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛: рдмреВрд╕реНрдЯ рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕
рднрд╛рдЧ 2: рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕рдорд░реНрдерди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛

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

рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд (рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг) рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЦреЗрд▓ рдореИрджрд╛рди рдХрд╛ рдПрдХ рд╡рд░реНрдЧ

class GameField { public: GameField(); bool canPass(int x, int y) const; int getWidth() const; int getHeight() const; }; 

рдХреНрд╖реЗрддреНрд░ рд╡рд░реНрдЧ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЧреНрд░рд┐рдб рд╣реИред рдЖрдк рд╕реАрдзреЗ рдФрд░ рддрд┐рд░рдЫреЗ рджреЛрдиреЛрдВ рдкрдбрд╝реЛрд╕реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред GameField :: canPass рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕реЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдпрд╛рдиреА рдпрд╣ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИ)

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

 BOOST_CONCEPT_ASSERT((SomeFuncAppropriate<SomeClass>)); 

рдореИрдВрдиреЗ рдпрд╣ рднреА рд╢рд┐рдХрд╛рдпрдд рдХреА рдХрд┐ рдЖрдВрдЦ рдХреЗ рджреЛрд╣рд░реЗ рдмреНрд░реЗрдХ рд╕реЗ рдЪреЛрдЯ рд▓рдЧреАред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡реЗ рди рдХреЗрд╡рд▓ рдореБрдЭреЗ рдХрд╛рдЯрддреЗ рд╣реИрдВ, рдФрд░ рдмрдврд╝рд╛рд╡рд╛ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ

 boost::function_requires<SomeFuncAppropriate<SomeClass> >(); 

рдпрд╣ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд╛ рдпрд╣ рд░реВрдк рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

So. рдПрдХ рд╕реНрд░реЛрдд рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рдл рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдЪреНрдЫрдиреНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕реА рд╕рдордп, рдореИрдВ рдкреНрд▓реЗрдЗрдВрдЧ рдлрд╝реАрд▓реНрдб (рдЧреЗрдордлрд┐рд▓реНрдб) рдХреА рдХрдХреНрд╖рд╛ рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ - рдпрд╣рд╛рдБ рдореИрдВ рдЗрд╕рдХрд╛ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рджреЗрддрд╛ рд╣реВрдБ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рдХреА рдЧреИрд░-рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓рдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИред рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдП * рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдЖрд╕рд╛рд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдмрдврд╝рд╛рд╡рд╛ :: astar_search рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рджреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╡рд░реНрдЯреЗрдХреНрд╕ рд╕реВрдЪреА рдЧреНрд░рд╛рдлрд╝ рдФрд░ рдШрдЯрдирд╛ рдЧреНрд░рд╛рдлрд╝ ред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреНрд░рд╛рдлрд╝ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдХрдИ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдврд╝рд╛рд╡рд╛ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдЖрдЗрдП рд╣рдо рдЙрди рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдВред

vertex_descriptor рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред GameField рд╡рд░реНрдЧ рдореЗрдВ, рдПрдХ рд╢реАрд░реНрд╖ рджреЛ рд╕реЗрд▓ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА (std :: pair) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, vertex_descriptor , рдЧреНрд░рд╛рдл рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд┐рднрд┐рдиреНрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддреН, рдСрдкрд░реЗрдЯрд░реЛрдВ, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ, рдЖрджрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдирд╣реАрдВ рдХрд╣рдирд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реЛрдЪрдирд╛ рдФрд░ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╢реАрд░реНрд╖ рдХреЗ рджреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рдЧреНрд░рд╛рдл рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЗрд╕рд╕реЗ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рд▓рд╛рдн рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЧреНрд░рд╛рдл рдореЙрдбрд▓ рдореЗрдВ, рдХреЛрдиреЗ рдмрд╕ (0, 0) -> 0, (0, 1) -> 1, рдФрд░ рдЗрддрдиреЗ рдкрд░ рд╣реЛрдВрдЧреЗред рдпрд╣ рдЖрдкрдХреЛ рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╢реАрд░реНрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдЧреНрд░рд╛рдлрд╝ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╢реАрд░реНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛

 std::pair<int, int> getCoordinates(const Vertex position, const GameField& graph) { return std::make_pair(position % graph.getWidth(), position / graph.getWidth()); } 

рдФрд░ рд╡рд╛рдкрд╕

 Vertex getVertex(int x, int y, const GameField& graph) { return x + y * graph.getWidth(); } 

рд╡рд░реНрдЯреЗрдХреНрд╕ рдЯрд╛рдЗрдк рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдмрддрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

edge_descriptor - рдзрд╛рд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ред рдПрдХ рдХрд┐рдирд╛рд░реЗ рджреЛ рдХреЛрдиреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдиреАрдЪреЗ рд▓рд┐рдЦреЗрдВ: std :: pair <vertex_descriptor, vertex_descriptor>

Direct_category - рд╡рд┐рд╢реЗрд╖ рдЯреИрдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпреЗ рдбреЗрдЯрд╛ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ), рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЧреНрд░рд╛рдлрд╝ рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдореВрд▓реНрдп рд╡реГрджреНрдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ: рдЕрдкреНрд░рддреНрдпрдХреНрд╖_рдЯреИрдЧ

edge_parallel_category рдПрдХ рдЕрдиреНрдп рдЯреИрдЧ рдкреНрд░рдХрд╛рд░ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рдл рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ (рдЬрдм рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдзрд╛рд░ рджреЛ рдХреЛрдиреЗ рдХреЗ рдмреАрдЪ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ - рдЙрдкрдпреЛрдЧ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдВ :: disallow_parallel_edge_tag

traversal_category рдПрдХ рдЯреИрдЧ рднреАред рдЧреНрд░рд╛рдл рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рд╣реИред VertexListGraph рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП :: vertex_list_graph_tag, рдФрд░ IncidenceGraph рдХреЗ рд▓рд┐рдП, рдХреНрд░рдорд╢рдГ, рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП :: рдШрдЯрдирд╛_рдЧреНрд░рд╛рдл_рдЯреИрдЧред рдпрд╣ рдПрдХ рдирдпрд╛ рдЯреИрдЧ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рджреЛрдиреЛрдВ рдмрд╛рдИрдкрд╛рд╕ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред

 struct game_field_traversal_catetory: public boost::vertex_list_graph_tag, public boost::incidence_graph_tag { }; 

vertex_iterator рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд ред рд╣рдо рд▓реЗрдЦ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

out_edge_iterator рд╢реАрд░реНрд╖ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ , рднрд╡рд┐рд╖реНрдп рдореЗрдВ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

degree_size_type рдЯрд╛рдЗрдк рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреА рдбрд┐рдЧреНрд░реА (рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдХрд┐рдирд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рдкреВрд░реНрдгрд╛рдВрдХред

vertices_size_type рд╡рд╣ рдкреНрд░рдХрд╛рд░ рдЬрд┐рд╕рдореЗрдВ рдЧреНрд░рд╛рдл рдХреЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд▓реЗрдВред

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

рдЕрдм рдЖрдкрдХреЛ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╡рд┐рдХрд▓реНрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╕реАрдзреЗ рдХрдХреНрд╖рд╛ рдореЗрдВ рд░рдЦрдирд╛ рд╣реИред

 class GameField { public: typedef int vertex_descriptor; ... 

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

 GameField::vertex_descriptor 

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмрдврд╝рд╛рд╡рд╛ :: graph_traits рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 boost::graph_traits<GameField>::vertex_iterator 

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдмрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ

  template <typename Graph> struct graph_traits { typedef typename Graph::vertex_descriptor vertex_descriptor; ... 

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

 namespace boost { template <> struct graph_traits<GameField> { typedef int vertex_descriptor; typedef std::pair <vertex_descriptor, vertex_descriptor> edge_descriptor; typedef boost::undirected_tag directed_category; typedef boost::disallow_parallel_edge_tag edge_parallel_category; typedef game_field_traversal_catetory traversal_category; typedef VertexIteratorImpl vertex_iterator; typedef OutEdgeIteratorImpl out_edge_iterator; typedef int degree_size_type; typedef int vertices_size_type; typedef void in_edge_iterator; typedef void edge_iterator; typedef void edges_size_type; }; } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ: in_edge_iterator, edge_iterator, edge_size_typeред рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ рд╡рд░реНрдЯреЗрдХреНрд▓рд┐рд╕реНрдЯрдЧреНрд░рд╛рдл рдФрд░ рдЗрдВрд╕реАрдбрд┐рдпреЙрдЧрдЧреНрд░рд╛рдл рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ( рд╢реВрдиреНрдп рдХрд░реЗрдВ )ред

рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдореЗрдВ, рдЧреНрд░рд╛рдл_рдЯреНрд░рд┐рдЯреНрд╕ рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ (рдпрд╛рдиреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рдПрдХ рд╢реАрд░реНрд╖ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп vertex_descriptor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ), рддрд╛рдХрд┐ рдЖрдк рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдмрджрд▓ рд╕рдХреЗрдВред рдЪреВрдВрдХрд┐ рдлреЙрд░реНрдо рдмреВрд╕реНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг :: рдЧреНрд░рд╛рдл_рдЯреНрд░реЗрдЯреНрд╕ <GameField> :: vertex_descriptor рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рд╣реИ, рд╣рдо рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд░реЗрдВрдЧреЗред

 typedef boost::graph_traits<GameField>::vertex_descriptor Vertex; typedef boost::graph_traits<GameField>::edge_descriptor Edge; typedef boost::graph_traits<GameField>::vertex_iterator VertexIterator; typedef boost::graph_traits<GameField>::out_edge_iterator OutEdgeIterator; typedef boost::graph_traits<GameField>::degree_size_type DegreeSizeType; typedef boost::graph_traits<GameField>::vertices_size_type VerticesSizeType; 

рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред VertexIteratorImpl рдФрд░ OutEdgeIteratorImpl рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреНрд░рд╛рдл_рдЯреНрд░рд┐рдЯреНрд╕ <GameField> рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд╣рдо рд▓реЗрдЦ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЗрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╕рдорд░реНрдерд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд░реЗрдЦрд╛рдВрдХрди рдХрд╛рд░реНрдп рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

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


All Articles