Note: 是该节的问题1 //import java.io.*; import java.util.*; public class Problem4_10 { private int[] ret=new int[9]; private int retTop=0; public boolean DFS(boolean[] chosen,int depth,int number){ if(depth>0){ if(number%depth!=0)//pruning: return false; else if(depth==9)//final state return true; else; } for(int i=1;i<=9;i++) if(!chosen[i]){ chosen[i]=true; number=number*10+i; if(DFS(chosen,depth+1,number)){ ret[retTop++]=i; return true; }else{//restore chosen[i]=false; number=number/10; } } return false;//no way! } public void printOut(){ while(retTop>0){ System.out.printf("%d",ret[retTop-1]); retTop--; } System.out.println(); } public static void main(String[] args){ Problem4_10 test=new Problem4_10(); boolean[] chosen=new boolean[10]; Arrays.fill(chosen, false); test.DFS(chosen, 0, 0); test.printOut(); } }