Conver Java code

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Discover
    New Member
    • Mar 2007
    • 1

    Conver Java code

    Hi there i'm a new developer (student) and i have algorithim coded by java and i want any help for converting to c# .....please
    Code:
    public class AssignmentProblem 
    { 
        double[][] cost;    //COST MATRIX
        int numCol;
        int numRow;
        
        
        public AssignmentProblem(double[][] cost){
            numCol=cost[0].length;
            numRow=cost.length;
            if (numRow>numCol) throw new IllegalArgumentException("Expecting more rows than columns");
            this.cost=cost;
        }//method
    
    
    
        public byte[][] Hungarain(){
            Hungarain m=new Hungarain();
            return m.solve();
        }//method
    
    
    
        //Hungarain MARKINGS
        private static byte NOT_MARKED=0;
        private static byte STARRED_ZERO=1;
        private static byte PRIMED_ZERO=2;
        
        
        public class Hungarain{
            byte[][] mark;        //MARK ZEROS
            int[] rowIsCovered;
            int[] colIsCovered;
    
    
            public byte[][] solve(){
                //MAKE THE MARKING ARRAY
                mark=new byte[numRow][];
                for(int i=0;i<numRow;i++){
                    mark[i]=new byte[numCol];
                }//for
                
                rowIsCovered=new int[numRow];
                colIsCovered=new int[numCol];
        
                reduceRows();
                starSomeZeros();
                while(true){
                    if (isDone()) break;;
                    pair p=findAndPrimeUncoveredZero();
                    new step5().main(p);
                }//loop
                
                return mark;
            }//method
    
    
        public void reduceRows(){
            double minval;
            
            for(int i=0;i<numRow;i++){
                minval=cost[i][0];
                for(int j=1;j<numCol;j++){
                    if (minval>cost[i][j]){
                        minval=cost[i][j];
                    }// if;
                }//for
    
                for(int j=0;j<numCol;j++){
                    cost[i][j]-=minval;
                }//for
    
            }//for
        }// stepone;
    
    
        public void starSomeZeros(){
        //ONLY ONE STAR ALLOWED PER ROW AND ONE PER COLUMN
            boolean[] colIsCovered=new boolean[numCol];
        
    A:        for(int i=0;i<numRow;i++){
                for(int j=0;j<numCol;j++){
                    if (!colIsCovered[j] && cost[i][j]==0){
                        mark[i][j]=STARRED_ZERO;
                        colIsCovered[j]=true;
                        continue A;        //DO NOT FINISH THIS ROW
                    }// if;
                }//for
            }//for
        }// steptwo;
    
    
        public boolean isDone(){
        //RETURN true IF DONE
        //ALSO COVER ROWS AND COLUMNS IF NOT DONE
            int count=0;
            for(int j=0;j<numCol;j++){
                for(int i=0;i<numRow;i++){
                    if (mark[i][j]==STARRED_ZERO){
                        colIsCovered[j]=1;
                        count++;
                        break;
                    }// if;
                }//loop;
            }//loop;
            
            if (count>=numRow) return true;
            return false;
        }// stepthree;
    
    
    
        public pair findAndPrimeUncoveredZero(){
        //FIND A UNCOVERED ZERO AND PRIME IT
    s4:        while(true){
                pair p=findUncoveredZero();
                if (p==null){
                //CAN'T FIND A ZERO
                    makeSomeZeros();        //MAKE IT
                    continue s4;        //TRY AGAIN
                }//endif
                    
                mark[p.row][p.col]=PRIMED_ZERO;
                        
                //find_star_in_row
                for(int j=0;j<numCol;j++){
                    if (mark[p.row][j]==STARRED_ZERO) {
                        rowIsCovered[p.row]=1;
                        colIsCovered[j]=0;
                        continue s4;
                    }// if;
                }//for
                    
                return p;
            }//for
        }// stepfour;
        
    
        public pair findUncoveredZero(){
            for(int i=0;i<numRow;i++){
                for(int j=0;j<numCol;j++){
                     if (cost[i][j]==0 && rowIsCovered[i]==0 && colIsCovered[j]==0){
                         return new pair(i, j);
                     }//if;
                 }//for
            }//for
            return null;
        }//method
        
        public void makeSomeZeros(){
            //find_smallest
            double minval=Float.MAX_VALUE;
            for(int i=0;i<numRow;i++){
                if (rowIsCovered[i]==1) continue;
                for(int j=0;j<numCol;j++){
                 if (colIsCovered[j]==0){
                     if (minval>cost[i][j]) minval=cost[i][j];
                 }// if;
                }//for
            }//for
            
            for(int i=0;i<numRow;i++){
                for(int j=0;j<numCol;j++){
                    if (rowIsCovered[i]==1) cost[i][j]+=minval;
                    if (colIsCovered[j]==0) cost[i][j]-=minval;
                }//for
            }//for
        }//method
        
        
    
    
        class step5{
        //Construct a series of alternating primed and starred zeros as follows.
            
            pair[] path=new pair[numRow*2];
            
            public int find_star_in_col(int c){
                for(int i=0;i<numRow;i++){
                    if (mark[i][c]==STARRED_ZERO) {
                        return i;
                    }//if;
                }//for
                return -1;
            }// find_star_in_col;
    
            public int find_prime_in_row(int r){
                for(int j=0;j<numCol;j++){
                    if (mark[r][j]==PRIMED_ZERO){
                        return j;
                    }// if;
                }//for
                return -1;
            }// find_prime_in_row;
    
        
            public void clear_covers(){
                for(int i=0;i<numRow;i++){
                    rowIsCovered[i]=0;
                    colIsCovered[i]=0;            //SQUARE ASSUMPTION MADE HERE
                }//for
            }// clear_covers;
        
            public void clear_primes(){
                for(int i=0;i<numRow;i++){
                    for(int j=0;j<numCol;j++){
                        if (mark[i][j]==PRIMED_ZERO){
                            mark[i][j]=NOT_MARKED;
                        }//if;
                    }//for
                }//for
            }// erase_primes;
        
            public void main(pair p){
                int count=0;
                path[count]=p;
                
                while(true){
                    int r=find_star_in_col(path[count].col);
                    if (r==-1) break;
                    
                    count++;
                    path[count]=new pair(r, path[count-1].col);
                    
                    int c=find_prime_in_row(path[count].row);
    
                    count++;
                    path[count]=new pair(path[count-1].row, c);
                }//for
                
                //convert_path(){
                for(int i=0;i<=count;i++){
                    if (mark[path[i].row][path[i].col]==STARRED_ZERO){
                        mark[path[i].row][path[i].col]=NOT_MARKED;
                    }else{
                        mark[path[i].row][path[i].col]=STARRED_ZERO;
                    }// if;
                }//for
                
                clear_covers();
                clear_primes();
            }// stepfive;
    
        }//class
        
        
        public String toString(){
            StringBuffer output=new StringBuffer();
            
            for(int j=0;j<numCol;j++){
                output.append("\t").append(colIsCovered[j]);
            }//for
            output.append("\n");
                    
            for(int i=0;i<numRow;i++){
                output.append(rowIsCovered[i]);
                for(int j=0;j<numCol;j++){
                    output.append("\t").append(cost[i][j]);
                    if (mark[i][j]==STARRED_ZERO){
                        output.append("*");
                    }else if (mark[i][j]==PRIMED_ZERO){
                        output.append("'");
                    }//endif
                }//for
                output.append("\n");
            }//for
            return output.toString();
        
        }//method
        }//class
     class pair
        {
            int row;
            int col;
    
            public pair(int row, int col)
            {
                this.row = row;
                this.col = col;
            }//method
        }//class	
     
    }//class
    Last edited by RedSon; Mar 5 '07, 10:19 PM. Reason: CODE TAGS
  • RedSon
    Recognized Expert Expert
    • Jan 2007
    • 4980

    #2
    Do you know that java is supported by Microsoft's J# implementation? You should not need to port this. If you really want to port this to C# you are going to have to look through the information on MSDN to find comparable methods to use.

    Comment

    Working...