zoukankan      html  css  js  c++  java
  • 数独杀手

    数独杀手(math.c/cpp/pas)
    【题目大意】
    用程序解出数独,按要求输出即可。
    【输入数据】
    要求完成的数独,未填处为 0。
    【输出数据】
    输出完成后数独。
    【输入样例】
    2 7 6 0 0 0 0 8 0
    3 0 0 8 0 0 0 1 5
    5 0 0 2 0 9 7 0 0
    0 8 2 3 0 0 4 0 0
    0 0 0 0 5 0 0 0 0
    0 0 1 0 0 4 3 6 0
    0 0 4 5 0 8 0 0 7
    1 6 0 0 0 3 0 0 4
    0 3 0 0 0 0 5 2 1
    【输出样例】
    2 7 6 1 4 5 9 8 3
    3 4 9 8 6 7 2 1 5
    5 1 8 2 3 9 7 4 6
    6 8 2 3 7 1 4 5 9

    4 9 3 6 5 2 1 7 8

    7 5 1 9 8 4 3 6 2

    9 2 4 5 1 8 6 3 7
    1 6 5 7 2 3 8 9 4
    8 3 7 4 9 6 5 2 1

    ------------------------

    传说中的码农题?(因为halt前没写close导致标准输出比我的输出长,惨痛教训!!!)

    type
      c=array[1..9]of boolean;
    var
      a:array[1..9,1..9]of longint;
      b:array[1..9,1..9]of boolean;
      ok:c;
      o:array[1..81]of record i,j:longint; end;
      i,j,num,ci,cj:longint;
    procedure dfs(d:longint;ok:c);
    var i,j,k,x,y:longint;
    begin
      if d=num+1 then
        begin
          for i:=1 to 9 do
            begin
              for j:=1 to 9 do write(a[i,j],' ');
              writeln;
            end;
          halt;
        end;
      x:=o[d].i;  y:=o[d].j;
      for i:=1 to 9 do ok[i]:=true;
      for j:=1 to 9 do if (b[x,j])then ok[a[x,j]]:=false;//行和列
      for i:=1 to 9 do if (b[i,y])then ok[a[i,y]]:=false; 
      ci:=((x-1) div 3)*3+1;   cj:=((y-1) div 3)*3+1;  //九宫格
      for i:=ci to ci+2 do
        for j:=cj to cj+2 do if (b[i,j]) then ok[a[i,j]]:=false;
      for k:=1 to 9 do
        if ok[k] then
        begin
          a[x,y]:=k;
    
          b[x,y]:=true;
          dfs(d+1,ok);
          b[x,y]:=false;
        end;
    end;
    begin
      assign(input,'math.in');  assign(output,'math.out');
      reset(input);  rewrite(output);
      for i:=1 to 9 do
        for j:=1 to 9 do
          begin
            b[i,j]:=true;
            read(a[i,j]);
            if a[i,j]=0 then
              begin
                b[i,j]:=false;
                inc(num);
                o[num].i:=i;  o[num].j:=j;
              end;
          end;
      dfs(1,ok);
      close(input);  close(output);
    end.
  • 相关阅读:
    String 方法
    异常处理
    数组长度改变方法
    对象
    重载(函数)
    函数
    java基础(死循环退出选项)
    cookie的封装,获取,删除
    事件监听的理解
    JS少数兼容
  • 原文地址:https://www.cnblogs.com/zjhl2/p/3855987.html
Copyright © 2011-2022 走看看