All pastes #538034 Raw Edit

Something

public text v1 · immutable
·published 2007-06-04 22:40 UTC
rendered paste body
import java.util.Scanner;
import java.io.*;

class Sudoku{
	public static void main( String[] args ){
		int[][] G = new int[10][10];
		int[][][] poss = new int[10][10][10];
			Scanner sc = null;
	    if(args.length !=1) Usage();
		try{
	      sc = new Scanner(new File(args[0]));
		  }catch(FileNotFoundException e){
	      System.err.println(e.getMessage());
	      Usage();
		  }
		getGrid(G, sc);
	    printGrid(G);
	    initPoss(poss,G);
		//while(!isSolved(G)){
			solveGrid(G,poss);
			upGrid(G, poss);
		//}
//					solveGrid(G,poss);
//			upGrid(G, poss);
//						solveGrid(G,poss);
//			upGrid(G, poss);
	    printGrid(G);
    }

	static void getGrid(int[][] G, Scanner sc){
      for(int i=1;i<=9;i++){
         for(int j=1;j<=9;j++){
            G[i][j] = sc.nextInt();
         }
      }
   }

	static void Usage(){
      System.out.println("Usage: java Soduko input_file");
      System.exit(1);
   }

	static void printGrid(int[][] G){
      System.out.println();
      for(int i=1;i<=9;i++){
         for(int j=1;j<=9;j++){
            if(G[i][j]==0){
               System.out.print("- ");
            }else{
               System.out.print(G[i][j]+" ");
            }
            if((j%3)==0) System.out.print(" ");
         }
         System.out.println();
      if((i%3)==0) System.out.println();
      }
   }
   
	static void initPoss(int[][][] poss, int[][]G){
		for(int i=1;i<=9;i++){
			for(int j=1;j<=9;j++){
				if(G[i][j]==0){
					poss[i][j][0]=9;
					for(int k=1;k<=9;k++){
						poss[i][j][k]=1;
					}
				}
				if(G[i][j]!=0){
					poss[i][j][0]=1;
					poss[i][j][G[i][j]]=1;
					for(int b=1;b<=9;b++){
						if(b!=G[i][j])
							poss[i][j][b]=0;
					}
				}
			}
		}
	}
	
	static void solveGrid(int[][] G, int[][][] possible){
   for(int i=1;i<=9;i++){
      for(int j=1;j<=9;j++){
	  System.out.println("i & j:"+i+" "+j);
         if(G[i][j]==0){
            lookRow(G,possible,i,j);
			System.out.println("i,j: "+possible[i][j][0]);
            lookCol(G,possible,j,j);
			System.out.println("i,j: "+possible[i][j][0]);
            lookBox(G,possible,i,j);
			System.out.println("i,j: "+possible[i][j][0]);
         }
      }
   }
}

	static void lookRow(int[][] G, int[][][] possible, int i,int j){
		for(int l=1;l<=9;l++){
			int m=G[i][l];
			if((possible[i][j][m]==1)&&(possible[i][j][0]>1)){
				possible[i][j][m]=0;
				possible[i][j][0]--;
			}
		}  
	}
	
	static void lookCol(int[][] G, int[][][] possible, int i,int j){
		for(int l=1;l<=9;l++){
			int m=G[l][j];
			System.out.println(m);
			System.out.println("possible(out): "+possible[i][j][m]+" "+possible[i][j][0]);
			if((possible[i][j][m]==1)&&(possible[i][j][0]>1)){
            possible[i][j][m]=0;
			possible[i][j][0]--;
			}
		}
	}
	
	static void lookBox(int[][] G, int[][][] possible, int i, int j){
		int rowstart=-1,colstart=-1,rowend=-1,colend=-1;
		if(i<=3){
			rowstart=1;
			rowend=3;
		}else if((i>=4)&&(i<=6)){
			rowstart=4;
			rowend=6;
		}else if(i>=7){
			rowstart=7;
			rowend=9;
		}
		if(j<=3){
			colstart=1;
			colend=3;
		}else if((j>=4)&&(j<=6)){
			colstart=4;
			colend=6;
		}else if(j>=7){
			colstart=7;
			colend=9;
		}
		//System.out.println("row+colstart,end:"+rowstart+" "+rowend+" "+colstart+" "+colend);
		for(int bi=rowstart;bi<=rowend;bi++){
			for(int bj=colstart;bj<=colend;bj++){
				int m = G[bi][bj];
				if((possible[i][j][m]==1)&&(possible[i][j][0]>1)){
					possible[i][j][m]=0;
					possible[i][j][0]--;
					System.out.println("possible["+i+"]["+j+"]: "+possible[i][j][0]);
				}
			}
		}
	}
	
	static void upGrid(int[][] G, int[][][] poss){
		for(int i=1;i<=9;i++){
			for(int j=1;j<=9;j++){
				if(G[i][j]!=0) continue;
				if(poss[i][j][0]!=1) continue;
				for(int m=1;m<=9;m++){
					if(poss[i][j][m]==1)
						G[i][j]=m;
				}
			}
		}
	}
	
	static boolean isSolved(int[][] G){
		for(int i=1;i<=9;i++){
			for(int j=1;j<=9;j++){
				if(G[i][j]==0)
					return false;
			}
		}
		return true;
	}
	
}