1 subroutine maxmatch ( nrows , ncols , colstr, rowind, prevcl,
2 $ prevrw, marker, tryrow, nxtchp, rowset,
65 integer colstr (ncols+1), rowind (*), rowset (nrows),
68 integer prevrw (ncols), prevcl (ncols), tryrow (ncols),
69 $ marker(nrows), nxtchp(ncols)
75 integer nodec, col, nextrw, lastrw, xrow, row, nxtcol,
80 do 600 nodec = 1, ncols
89 nxtchp(col) = colstr(col)
96 100 nextrw = nxtchp(col)
97 lastrw = colstr(col+1) - 1
99 if (nextrw .gt. 0 )
then
101 do 200 xrow = nextrw, lastrw
103 if ( rowset(row) .eq. 0 ) go to 400
121 tryrow(col) = colstr(col)
125 if ( lastrw .ge. nextrw )
then
126 do 300 xrow = nextrw, lastrw
130 if ( marker(row) .lt. nodec )
then
137 tryrow(col) = xrow + 1
141 if ( nxtcol .lt. 0 )
then
144 $
if ( nxtcol .eq. col )
then
147 $
if ( nxtcol .gt. 0 )
then
157 tryrow(nxtcol) = colstr(nxtcol)
181 if ( col .gt. 0 )
then
192 400 rowset(row) = col
196 500
if ( pcol .gt. 0 )
then
197 if ( rowset(prow) .ne. col ) go to 803
211 do 700 row = 1, nrows
213 if ( col .gt. 0 )
then
225 901
format (
' bug in maxmatch : search reached a forbidden column')
229 902
format (
' bug in maxmatch : search followed a matching edge')
232 803
write (6, 903) col, row, row, rowset(row)
233 903
format (
' bug in maxmatch : pointer toward root disagrees with ',
235 $
'prevcl (', i4,
') = ', i4,
' but colset (', i4,
') = ',
subroutine maxmatch(nrows, ncols, colstr, rowind, prevcl, prevrw, marker, tryrow, nxtchp, rowset, colset)