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.
  • 相关阅读:
    希腊字母写法
    The ASP.NET MVC request processing line
    lambda aggregation
    UVA 10763 Foreign Exchange
    UVA 10624 Super Number
    UVA 10041 Vito's Family
    UVA 10340 All in All
    UVA 10026 Shoemaker's Problem
    HDU 3683 Gomoku
    UVA 11210 Chinese Mahjong
  • 原文地址:https://www.cnblogs.com/zjhl2/p/3855987.html
Copyright © 2011-2022 走看看