两队比赛,甲队为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;圆圈代表对应的行列位置的选手进行比赛。