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

两队比赛,甲队为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); } private static final int ROW = 3, COL = 3, START_ROW = 0, START_COL = 0; private static boolean[][] board = new boolean[8][8]; 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+1); 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; if(row==0 && col==0 || row==2 && (col==0 || col==2)) return false; return true; } private static int count = 0; 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;圆圈代表对应的行列位置的选手进行比赛。

 

 

你可能感兴趣的:(比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题)