三道模拟题
- 锯齿数独
学会输入输出
回溯 复习了解数独

import java.util.Scanner;public class test {static int count = 0;public static void main(String[] args) {Scanner scan = new Scanner(System.in);//读取案例数int num = scan.nextInt();int[][] qipan = new int[3][3];int[][] gong = new int[3][3];for (int n = 0; n < num; ++n) {for (int i = 0; i < 3; ++i) {String tmp = scan.next();for (int j = 0; j < tmp.length(); ++j) {if (tmp.charAt(j) != '*') qipan[i][j] = tmp.charAt(j) - '0';}}for (int i = 0; i < 3; ++i) {for (int j = 0; j < 3; ++j) {int x = scan.nextInt();int y = scan.nextInt();gong[x][y] = i;}}boolean res = backTrack(qipan, gong);System.out.println(count);}}private static boolean isValidSudoku(int row, int col, int val, int[][] board, int[][] gong){// 同行是否重复for (int i = 0; i < 3; i++){if (board[row][i] == val){return false;}}// 同列是否重复for (int j = 0; j < 3; j++){if (board[j][col] == val){return false;}}// 宫格里是否重复int gongHao = gong[row][col];for (int i = 0; i < 3; ++i) {for (int j = 0; j < 3; ++j) {if (gongHao == gong[i][j]) {if (board[i][j] == val) return false;}}}return true;}public static boolean backTrack(int[][] qipan, int[][] gong) {for (int i = 0; i < 3; ++i) {for (int j = 0; j < 3; ++j) {if (qipan[i][j] != 0) continue;for (int k = 1; k <= 3; ++k) {if (isValidSudoku(i, j, k, qipan, gong)) {qipan[i][j] = k;if (backTrack(qipan, gong)) {//输出棋盘//for (int m = 0; m < 3; ++m) {// for (int n = 0; n < 3; ++n) {// System.out.print(qipan[m][n]);// }// System.out.println();//}count++;}qipan[i][j] = 0;}}return false;}}return true;}}
- 黑白棋
used[][]数组,存放是否棋子刚刚被反转过
used[x][y] == 0 可以反转
反转过棋子以后 置1,used[x][y] == 1
在下一次下棋之前(for循环的最后,将所有1置2,将所有2置0)

- 战旗
