Classic Questions
Ref
http://blog.csdn.net/u011095253/article/details/9158473
Public classSolution { PublicArraylist<string[]> Solvenqueens (intN) {ArrayList<String[]> res =NewArraylist<string[]>(); if(n<=0)returnRes; int[] loc =New int[n]; Helper (Res,loc,0, N); returnRes; } Public voidHelper (arraylist<string[]> Res,int[] Loc,intCurrow,intN) { if(currow==N) {printbd (Res,loc, N); }Else{ for(inti=0;i<n;i++) {Loc[currow]=i; if(Isval (Loc,currow)) {Helper (Res,loc,currow+1, N); } } } } Public BooleanIsval (int[] Loc,intCurR) { for(inti=0;i<curr;i++){ if((Loc[i]==loc[curr]) | | (Math.Abs (Loc[i]-loc[curr]) = = (curr-i)))return false; } return true; } Public voidPRINTBD (arraylist<string[]> Res,int[] Loc,intN) {string[] Sol=NewString[n]; for(inti=0;i<n;i++) {String T=NewString (); for(intj=0;j<n;j++){ if(loc[i]==j) {T+ = "Q"; }ElseT+= "."; } Sol[i]=T; } res.add (SOL); }}
II require the number of output results, small changes can be
Public classSolution { Public intTotalnqueens (intN) {if(n<=0)return0; int[] res =New int[1]; int[] loc =New int[n]; Helper (res, LOC,0, N); returnRes[0]; } Public voidHelperint[] Res,int[] Loc,intCurR,intN) { if(curr==n) res[0]++; Else{ for(inti=0;i<n;i++) {Loc[curr]=i; if(Isval (Loc, CurR)) {Helper (res, loc, CurR+1, N); } } } } Public BooleanIsval (int[] Loc,intCurR) { for(inti=0;i<curr;i++){ if((Loc[i]==loc[curr]) | | Math.Abs (Loc[i]-loc[curr]) ==curr-i) { return false; } } return true; }}
N-queens I & II