рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ: рдмреАрдПрдлрдПрд╕

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

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди

рдЧреНрд░рд╛рдлрд╝ рдХреЗ рдПрдХ рд╢реАрд░реНрд╖ рд╕реЗ рджреВрд╕рд░реЗ рддрдХ рдПрдХ рдкрде рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрде рдиреНрдпреВрдирддрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╡рд┐рд╡рд░рдг

рдореИрдВ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдореВрд▓ рдПрдХ рд╕реЗ рджреВрд░реА рдмрдврд╝рд╛рдиреЗ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдЧреНрд░рд╛рдл рдХреЗ рдХреЛрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдЬреИрд╕рд╛ рдХрд┐ рдЖрдВрдХрдбрд╝реЗ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдо рд╕рднреА рд╕рд┐рд░реЛрдВ рдХреЛ рддреАрди рд╕реЗрдЯреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЬреИрд╕реЗ рд╣реА рд╕рднреА рдХреЛрдиреЗ рдХрд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдХрддрд╛рд░ рдореЗрдВ рд╕рднреА рдЧреНрд░реЗ рдХреЛрдиреЗ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдП рд░рдЦреЗрдВрдЧреЗ: рдХрддрд╛рд░ рдореЗрдВ рд╕рднреА рдЧреНрд░реЗ рдХреЛрдиреЗ рдХреА рджреВрд░реА рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╡реЗ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВ рд╡рд╣ рдиреАрд░рд╕ рд░реВрдк рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рд╣рдореЗрдВ рдХрддрд╛рд░ рд╕реЗ рдкрд╣рд▓рд╛ рд╢реАрд░реНрд╖ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рд╣рдо рдЗрд╕реЗ v рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ)ред рдЕрдкрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдбрд╝реЛрд╕реА w рдХреЗ рд▓рд┐рдП, рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрднрд╡ рд╣реИ:
  1. w рдПрдХ рдмреНрд▓реИрдХ рдпрд╛ рдЧреНрд░реЗ рдЯреЙрдк рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдХреЛрдИ рдирдИ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
  2. w рд╕рдлреЗрдж рдЪреЛрдЯреА рд╣реИред рдлрд┐рд░ рдЙрд╕рд╕реЗ рджреВрд░реА d (w) = d (v) + 1. рд╣реИ рдФрд░ рдЬрдм рд╕реЗ рд╣рдо рджреВрд░реА рдЬрд╛рдирддреЗ рд╣реИрдВ, w рдПрдХ рдЧреНрд░реЗ рдЪреЛрдЯреА рдмрди рдЬрд╛рддрд╛ рд╣реИ

рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЧреНрд░реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╣реЛрдиреЗ рддрдХ рджреЛрд╣рд░рд╛рдПрдВред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рдл рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ <рд╡реЗрдХреНрдЯрд░ <int> рдХрд┐рдирд╛рд░реЛрдВ рд╕рд░рдгреА, рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде [v] рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдХреЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ v рд╕реЗ рдПрдХ рдХрд┐рдирд╛рд░реЗ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рднреА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрдн рдЪрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢реАрд░реНрд╖ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
BFS
void BFS() { queue<int> q; // :      q.push(start); d[start] = 0; mark[start] = 1; //   -     while (!q.empty()) { //     int v = q.front(); q.pop(); //      for (int i = 0; i < (int)edges[v].size(); ++i) { //    if (mark[edges[v][i]] == 0) { //    d[edges[v][i]] = d[v] + 1; //     mark[edges[v][i]] = 1; q.push(edges[v][i]); } } } } 


рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ?

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдПрдХ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд┐рд╕реА рднреА рд╢реАрд░реНрд╖ v рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреА [0] = рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ, рдкреА [1], ..., рдкреА [рдХреЗ] = v рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢реАрд░реНрд╖ рд╕реЗ рд╢реАрд░реНрд╖ рддрдХ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдорд╛рд░реНрдЧ рд╣реИред рддрдм рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореВрд▓реНрдп d [v] = k рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рд╕рдмреВрдд:
  1. d [v] тЙд рдХреЗ
    • рдЖрдзрд╛рд░: рд╡рд░реНрдЯреЗрдХреНрд╕ рдкреА [0] = рдкреНрд░рд╛рд░рдВрдн рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдбреА [рдкреА [0]] = 0
    • рдЕрдиреБрдорд╛рди: рд╡рд░реНрдЯреЗрдХреНрд╕ p [i - 1] рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ d [p [i]] ver i
    • рдЪрд░рдг: рдЬрдм рд╢реАрд░реНрд╖ p [i - 1] (рдпрд╛ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрд┐рдирд╛рд░реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХрд┐ рд╢реАрд░реНрд╖ p [i] рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, d [p [i]] [i
  2. d [v] тЙе рдХреЗ
    рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ d [v] <k рд╢реАрд░реНрд╖ v рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ; рд╡рд░реНрдЯреЗрдХреНрд╕, рдЬрдм рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд░реНрдЯреЗрдХреНрд╕ рд╡реА рдХреЛ рдЧреНрд░реЗ рд░рдВрдЧ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╣рдо рдЗрд╕реЗ рдбрдмреНрд▓реНрдпреВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ); рд╡рд░реНрдЯреЗрдХреНрд╕, рдЬрдм рдЬрд╛рдВрдЪ рдХреА рдЧрдИ, рддреЛ рд╡рд░реНрдЯреЗрдХреНрд╕ рдбрдмреНрд▓реНрдпреВ рдХреЛ рдЧреНрд░реЗ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛; ... рд╢реАрд░реНрд╖ рдкреНрд░рд╛рд░рдВрдн рдкреНрд░рд╛рд░рдВрднред рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рджреЛ рдкрдбрд╝реЛрд╕реА рдХреЛрдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдХрд┐рдирд╛рд░реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рд╢реАрд░реНрд╖ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рд░реНрдЧ рдХреЛ рдХрд╢реНрдореАрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЫреЛрдЯреА рд▓рдВрдмрд╛рдИ рдХреЗ v рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ - рдПрдХ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕, рдЗрд╕рд▓рд┐рдП, d [v] path k

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛

рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рдирд╛рд░реЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рд░рдВрддрд░ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ O (V + E) рд╣реИред
рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рд╢реАрд░реНрд╖рдХреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ V рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреА рдЕрдзрд┐рдХрддрдо рдорд╛рддреНрд░рд╛ O (V) рд╣реИред

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп

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

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


All Articles