First, we need to calculate all prefix sums s [i, j] for such matrices as a [1..i, 1..j], for all i and j with the constraint s [i, 0] = s [0, j] = 0. Obviously, this is done in O (mn) time.If A_left and A_right are through recursion, then you must manually find A_column.
The main algorithm is:
If the matrix is ββone element, we return its value.
Otherwise:Thus, m β€ n.
- if m> n, rotate the matrix by 90 degrees.
- Let A_left be the solution for the left half.
- A_right is the solution for the right half.
- A_column - solution for column-centered tasks (finding such a maximum submatrix that would cross the center line)
- The overall solution is a maximum of these three.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Copy Source | Copy HTML / n B list[ i ], .. list[ i ] i ; / V = { 1 , ..., n}; for i := 1 to n do begin for k := 1 to n do begin cand[k]:=first of list[k]; d[k] := a [ i , k] + b [k, cand[k]]; end; / V d[ 1 ], ..., d[n]; / S - ; /* 1 : */ while |S| β€ n β n log n do begin / v ; / cand[v] S; c[ i , cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; for w in W do while cand[w] is in S do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; U := S; /* 2 : */ while |S| < n do begin / v ; if cand[v] is not in S then begin / cand[v] S; c[v, cand[v]] := d[v]; / W = {w|cand[w] = cand[v]}; end else W = {v}; for w in W do cand[w]:=next of list[w]; while cand[w] is in U do cand[w]:= next of list[w]; / W d[w] = a [ i , w]+ b [w, cand[w]]; end; end.
Source: https://habr.com/ru/post/136188/
All Articles