zoukankan      html  css  js  c++  java
  • Poj2676

    经典DFS现在看来nice啊!

     1 package SoduKu;
     2 
     3 import java.io.InputStreamReader;
     4 import java.util.Scanner;
     5 /*
     6  *我用row[k][i]表示第k行是否已经有数i
     7  *col[k][i]表示第k列是否已经有数i
     8  *而sq[k][i]表示第k个九宫格是否有数i(这里k=(x/3)*3+(y/3),可以想想为什么)
     9  *从0,0 依次搜到8,8  DFS依次往下
    10  **/
    11 public class Poj2676{
    12 
    13     static int[][] map = new int[9][9];
    14     static int[][] col = new int[9][9];
    15     static int[][] row = new int[9][9];
    16     static int[][] sq  = new int[9][9];
    17     static boolean isFind = false;
    18     static void fill(int[][] a){
    19         for(int i = 0; i < 9; ++i){
    20             for(int j = 0; j < 9; ++j)
    21                 a[i][j] = 0;
    22         }
    23     }
    24     static void print(){
    25         for(int i = 0; i < 9; ++i) {
    26             for(int j = 0; j < 9; ++j){
    27                 System.out.print(map[i][j]+1);
    28             }
    29             System.out.println();
    30         }
    31     }
    32 
    33     static void dfs(int x, int y){
    34         int u = x*9 + y + 1;
    35         if(x == 9){
    36             isFind = true;
    37             print();
    38         }
    39 
    40         if(isFind)
    41             return;
    42         if(map[x][y] != -1){
    43             dfs(u/9, u%9);
    44             return;
    45         }
    46 
    47         for(int i = 0; i < 9 && !isFind; ++i){
    48             int k = (x/3)*3 + y/3;
    49             if(row[x][i] == 0 && col[y][i] == 0 && sq[k][i] == 0){
    50                 row[x][i] = col[y][i] = sq[k][i] = 1;
    51                 map[x][y] = i;
    52 
    53                 dfs(u/9, u%9);
    54 
    55                 row[x][i] = col[y][i] = sq[k][i] = 0;
    56                 map[x][y] = -1;
    57             }
    58         }
    59     }
    60     public static void main(String[] args){
    61         Scanner scanner = new Scanner(new InputStreamReader(System.in));
    62 
    63         int k;
    64         int n = scanner.nextInt();
    65         scanner.nextLine();
    66         for(int ni = 1; ni <= n; ++ni){
    67 
    68             fill(map);
    69             fill(row);
    70             fill(col);
    71             fill(sq);
    72             isFind = false;
    73             for(int i = 0; i < 9; ++i){
    74                 String string = scanner.nextLine();
    75                 for(int j = 0; j < 9; ++j) {
    76                     k = string.charAt(j) - '0';
    77                     map[i][j] = k-1;
    78                     if(k != 0){
    79                         row[i][k-1] = col[j][k-1] = sq[(i/3)*3 + (j/3)][k-1] = 1;
    80                     }
    81                 }
    82             }
    83             dfs(0, 0);
    84         }
    85     }
    86 }
  • 相关阅读:
    linux下查找文件及查找包含指定内容的文件常用命令
    小程序与h5之前切换频繁时候,点击无反应
    vue项目微信分享之后路由链接被破坏问题
    async-await用法
    小程序input组件获得焦点时placeholder内容有重影
    es6语法在ios低版本的支持性
    h5页面避免两个页面反复跳转死循环
    小程序getLocation出现的各种问题汇总
    小程序组件跳转页面存在兼容问题
    nigix反向代理
  • 原文地址:https://www.cnblogs.com/ya-cpp/p/5323790.html
Copyright © 2011-2022 走看看