日期:2014-05-20  浏览次数:20728 次

请问如果想退出递归,但是不退出程序,有什么好方法?谢谢
这是一个《骑士问题》,请问如果想退出递归,但是不退出程序,有什么好方法?谢谢

class   Stack <E> {
    private   class   Node{
        private   Node   prev;
        private   E   e;
        private   Node(E   e){
            this.e   =   e;
        }
        private   E   get(){
            return   e;
        }
    }
    private   Node   cur;
    private   int   size;
    public   void   push(E   e){
        Node   n   =   new   Node(e);
        n.prev   =   cur;
        cur   =   n;
        size++;
    }
    public   E   pop(){
        if(size <=0)
            return   null;
        size--;
        try{
            return   cur.get();
        }finally{
            cur   =   cur.prev;
        }
    }
    public   int   size(){
        return   size;
    }
}


public   class   Knight{
    private   int   map[][],blocks;
    private   Stack <int[]>   s;
    public   Knight(int   x,int   y){
        map   =   new   int[x+2][y+2];
    }
    public   void   start(int   x,int   y){
        init();
        displayMatrix();
        travel(x,y);
    }
    public   void   setBlock(int   x,int   y){
        map[x][y]   =   -1;
        blocks++;
        }
    private   void   travel(int   x,int   y){
        if(map[x][y]!=0)
            return;
        map[x][y]   =   1;
        s.push(new   int[]{x,y});
        if(s.size()==(map.length-2)*(map[0].length-2)-blocks){
            while(s.size()> 0){
                int[]   temp   =   s.pop();
                map[temp[0]][temp[1]]   =   s.size();
            }
            displayMatrix();
            System.exit(0);// < <就是这里,不得不用exit(0)来退出递归
        }
        travel(x+1,y);
        travel(x-1,y);
        travel(x,y+1);
        travel(x,y-1);
        s.pop();
        map[x][y]   =   0;