/**
         * print method for debugging
         */
        public void printMe()
        {
            for (int i = 0; i < this.row; i++)
            {
                for (int j = 0; j < this.col; j++)
                {
                    MatrixElement e = this.matrix[i, j];
                    if (this.coveredRows[e.getMyRow()])
                    {
                        Console.Out.Write("|");
                    }
                    if (this.coveredCols[e.getMyCol()])
                    {
                        Console.Out.Write("|");
                    }
                    if (e.getValue() < Double.MaxValue)
                    {
                        double temp = ((int)(e.getValue() * 1000.0)) / 1000.0;
                        Console.Out.Write(temp);
                    }
                    else
                    {
                        Console.Out.Write("inf");
                    }

                    if (e.isPrimed())
                    {
                        Console.Out.Write("'");
                    }
                    if (e.isStarred())
                    {
                        Console.Out.Write("*");
                    }
                    if (this.coveredRows[e.getMyRow()])
                    {
                        Console.Out.Write("|");
                    }
                    if (this.coveredCols[e.getMyCol()])
                    {
                        Console.Out.Write("|");
                    }
                    Console.Out.Write("\t");
                }
                Console.Out.WriteLine();
            }
            Console.Out.Write("\n");
        }
        /**
         * @return the primed zero in the row of @param e
         */
        public MatrixElement getPrimedZeroInR(MatrixElement e)
        {
            int r = e.getMyRow();

            for (int j = 0; j < this.col; j++)
            {
                if (this.matrix[r, j].getValue() == 0)
                {
                    if (this.matrix[r, j].isPrimed())
                    {
                        return(this.matrix[r, j]);
                    }
                }
            }
            return(null);
        }
        /**
         * uncover the row of element @param e
         */
        public void unCoverRow(MatrixElement e)
        {
            int r = e.getMyRow();

            this.coveredRows[r] = false;
        }
        /**
         * covers the row of element @param e
         */
        public void coverRow(MatrixElement e)
        {
            int r = e.getMyRow();

            this.coveredRows[r] = true;
        }