protected static void removeRedundantArcs(int row, int column, List<Integer> marcs, McgregorHelper mcGregorHelper) {
        int neighborBondNumA = mcGregorHelper.getNeighborBondNumA();
        int neighborBondNumB = mcGregorHelper.getNeighborBondNumB();
        List<Integer> iBondNeighborAtomsA = mcGregorHelper.getiBondNeighborAtomsA();
        List<Integer> iBondNeighborAtomsB = mcGregorHelper.getiBondNeighborAtomsB();
        int g1Atom = iBondNeighborAtomsA.get(row * 3 + 0);
        int g2Atom = iBondNeighborAtomsA.get(row * 3 + 1);
        int g3Atom = iBondNeighborAtomsB.get(column * 3 + 0);
        int g4Atom = iBondNeighborAtomsB.get(column * 3 + 1);

        for (int x = 0; x < neighborBondNumA; x++) {
            int rowAtom1 = iBondNeighborAtomsA.get(x * 3 + 0);
            int rowAtom2 = iBondNeighborAtomsA.get(x * 3 + 1);

            for (int y = 0; y < neighborBondNumB; y++) {
                int columnAtom3 = iBondNeighborAtomsB.get(y * 3 + 0);
                int columnAtom4 = iBondNeighborAtomsB.get(y * 3 + 1);

                if (McGregorChecks.cases(g1Atom, g2Atom, g3Atom, g4Atom, rowAtom1, rowAtom2, columnAtom3,
                        columnAtom4)) {
                    marcs.set(x * neighborBondNumB + y, 0);
                }

            }
        }

        for (int v = 0; v < neighborBondNumA; v++) {
            marcs.set(v * neighborBondNumB + column, 0);
        }

        for (int w = 0; w < neighborBondNumB; w++) {
            marcs.set(row * neighborBondNumB + w, 0);
        }

        marcs.set(row * neighborBondNumB + column, 1);
    }
protected static void removeRedundantArcs ( int row , int column , List < Integer > marcs , McgregorHelper mcGregorHelper ) { int neighborBondNumA = mcGregorHelper . getNeighborBondNumA ( ) ; int neighborBondNumB = mcGregorHelper . getNeighborBondNumB ( ) ; List < Integer > iBondNeighborAtomsA = mcGregorHelper . getiBondNeighborAtomsA ( ) ; List < Integer > iBondNeighborAtomsB = mcGregorHelper . getiBondNeighborAtomsB ( ) ; int g1Atom = iBondNeighborAtomsA . get ( row * 3 + 0 ) ; int g2Atom = iBondNeighborAtomsA . get ( row * 3 + 1 ) ; int g3Atom = iBondNeighborAtomsB . get ( column * 3 + 0 ) ; int g4Atom = iBondNeighborAtomsB . get ( column * 3 + 1 ) ; for ( int x = 0 ; x < neighborBondNumA ; x ++ ) { int rowAtom1 = iBondNeighborAtomsA . get ( x * 3 + 0 ) ; int rowAtom2 = iBondNeighborAtomsA . get ( x * 3 + 1 ) ; for ( int y = 0 ; y < neighborBondNumB ; y ++ ) { int columnAtom3 = iBondNeighborAtomsB . get ( y * 3 + 0 ) ; int columnAtom4 = iBondNeighborAtomsB . get ( y * 3 + 1 ) ; if ( McGregorChecks . cases ( g1Atom , g2Atom , g3Atom , g4Atom , rowAtom1 , rowAtom2 , columnAtom3 , columnAtom4 ) ) { marcs . set ( x * neighborBondNumB + y , 0 ) ; } } } for ( int v = 0 ; v < neighborBondNumA ; v ++ ) { marcs . set ( v * neighborBondNumB + column , 0 ) ; } for ( int w = 0 ; w < neighborBondNumB ; w ++ ) { marcs . set ( row * neighborBondNumB + w , 0 ) ; } marcs . set ( row * neighborBondNumB + column , 1 ) ; }
The function is called in function partsearch. The function is given a temporary matrix and a position (row/column)
within this matrix. First the function sets all entries to zero, which can be exlcuded in respect to the current
atom by atom matching. After this the function replaces all entries in the same row and column of the current
position by zeros. Only the entry of the current position is set to one.
Return value "count_arcsleft" counts the number of arcs, which are still in the matrix.
@param row
@param column
@param marcs
@param mcGregorHelper