比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题

时间:2021-11-28 16:01:03

两队比赛,甲队为A、B、C3人,乙队为X、Y、Z3人。已知A不和X比,C不和X、Z比,请编程序找出3队赛手名单

采用了与八皇后问题相似的解法,代码如下:

如有疑问请链接八皇后问题的解法:http://www.cnblogs.com/kodoyang/p/EightQueen.html

/**
 * 两队比赛,甲队为A、B、C3人,乙队为X、Y、Z3人。
 * 已知A不和X比,C不和X、Z比,请编程序找出3队赛手名单
 */
public class PlayerListDemo {

    public static void main(String[] args) {
        nextRowPlace(START_ROW);
    }

    , COL = , START_ROW = , START_COL = ;
    ][];

    private static void nextRowPlace(final int row) {
        if(row == ROW){
            print();
            return;
        }
        for(int j=START_COL; j!=COL; ++j)
            if(checkPosValid(row, j)){
                board[row][j] = true;
                nextRowPlace(row+);
                board[row][j] = false;
            }
        return;
    }

    private static boolean checkPosValid(final int row, final int col) {
        for(int i=START_ROW; i!=ROW; ++i)
            if(board[i][col])
                return false;
         && col== || row== && (col== || col==))
            return false;
        return true;
    }

    ;
    private static void print() {
        System.out.println("--- --- --- --- --- " + ++count +" --- ---");
        for(int i=START_ROW; i!=ROW; ++i){
            for(int j=START_COL; j!=COL; ++j)
                System.out.print(board[i][j] ? "O " : "X ");
            System.out.println();
        }
        System.out.println();
        return;
    }

}

得到如下结果:

--- --- --- --- --- 1 --- ---
X X O
O X X
X O X 

行代表A、B、C,列代表X、Y、Z;圆圈代表对应的行列位置的选手进行比赛。