usaco numgrid 2008.9.29

本文介绍了一种解决特殊数独问题的算法实现,通过Pascal语言编程,使用递归和回溯的方法来搜索所有可能的六位数字组合。特别关注了哈希表的设置范围及其对算法效率的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

usaco numgrid 2008.9.29

虽然说是六位数,但是,因为题中说道,会有000011 etc的形式,所以哈希就要从0 –999999而不是100000-999999,这点wa了

{

ID:

PROG:numgrid

LANG:PASCAL

}

program p_numgrid;
const fin='numgrid.in';fout='numgrid.out';
      p:array[1..4,1..2]of longint=((-1,0),(1,0),(0,-1),(0,1));
var a:array[1..5,1..5]of longint;
    x:array[0..999999]of boolean;
    ans,s:longint;
    f1,f2:text;
procedure init;
var i,j:longint;
begin
  assign(f1,fin);reset(f1);
  assign(f2,fout);rewrite(f2);
  for i:=1 to 5 do
     for j:=1 to 5 do
       read(f1,a[i,j]);
  fillchar(x,sizeof(x),true);
  ans:=0;
end;
procedure put;
begin
  if x[s] then begin inc(ans);x[s]:=false;end;
end;
procedure deal(x1,x2,m:longint);
var y1,y2,i:longint;
begin
  if m=6 then begin put;exit;end;
  for i:=1 to 4 do
    begin
      y1:=x1+p[i,1];
      y2:=x2+p[i,2];
      if (y1>0) and (y1<6) and (y2>0) and (y2<6) then
         begin
          s:=s*10+a[y1,y2];
          deal(y1,y2,m+1);
          s:=s div 10;
         end;
    end;
end;
procedure doit;
var i,j:longint;
begin
  for i:=1 to 5 do
    for j:=1 to 5 do
      begin s:=a[i,j];
            deal(i,j,1);
      end;
end;
begin
  init;
  doit;
  writeln(f2,ans);close(f1);close(f2);end.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值