Article View: fj.lang.pascal
Article #70魔法陣
From: Takashi Sato
Date: Tue, 09 Dec 1997 00:00
Date: Tue, 09 Dec 1997 00:00
162 lines
4256 bytes
4256 bytes
$B:4F#!wEl9)Bg$H$b$&$7$^$9!#(B
$B@hF|$N=gNs$N%W%m%0%i%`$r1~MQ$7$F!"$"$kF~NO(Bn$B$KBP$7$F!"(B
n*n$B$NKbK!?X(B(n*n$B$^$9$NCf$K#1$+$i(Bn*n$B$^$G$N?t;z$rF~$l$F$$$-(B
$B=D!"2#!"<P$a$N?t;z$N9g7W$,$9$Y$FEy$7$$$b$N$r8@$&(B)
$B$r=PNO$9$k%W%m%0%i%`$r:n$m$&$H;W$$!"(B
$B$J$s$H$+<!$N$h$&$J%W%m%0%i%`$r40@.$5$;$^$7$?!#(B
program parmutation(input,output);
{n*n$B$NKbK!?X$r=PNO$9$k%W%m%0%i%`(B}
const Max = 10;
type Range = 1..Max;
NumData = array [Range] of integer;
BooData = array [Range] of Boolean;
var
n,count : integer;$B!!(B{count$B$O(Bperm$B$r8F$S=P$7$?2s?t!#7W;;NL$NL\0B(B}
p : NumData;
Empty : BooData;{$B$=$N?t;z$,;H$o$l$F$$$k$+(B}
found : Boolean;{$BKbK!?X$,8+$D$+$C$?$+(B}
procedure shokika;
{$B$J$K$b;H$o$l$F$$$J$$>uBV$K$9$k(B}
var i : integer;
begin
for i:=1 to n*n do
Empty[i]:=true
end; { shokika }
procedure Print;
{$B$G$-$"$,$C$?KbK!?X$r=PNO$9$k(B}
var i,j : integer;
begin
for j:= 0 to n-1 do begin
for i:=1 to n do write(p[j*n+i]:3);
writeln;
end;
writeln
end;{Print}
function Line(n : integer):integer;
{1$B9T!"$^$?$O(B1$BNsEv$?$j$N9g7W(B}
var i,j : integer;
begin
j:=0;
for i:=1 to n*n do
j:=j+i;
j:=j div n;
Line:=j
end; { Line }
procedure search;
{$B9g7W$rD4$Y$k!#(B}
var i,j,tmp : integer;
hurdle : array [1..4] of Boolean;
procedure col;
{$B9T$N9g7W$rD4$Y$k(B}
begin
for i:=0 to n-1 do
begin
tmp:=0;
for j:=1 to n do
tmp:=tmp+p[i*n+j];
if not (tmp = Line(n)) then hurdle[1]:=false
end;
end; { col }
procedure row;
{$BNs$N9g7W$rD4$Y$k!#(B}
begin
for j:=1 to n do begin
tmp:=0;
for i:=0 to n-1 do
tmp:=tmp+p[i*n+j];
if not (tmp = Line(n)) then hurdle[2]:=false
end
end; { row }
procedure diagonal;
{$BBP3Q@~$N9g7W$rD4$Y$k!#(B}
begin
tmp:=0;
for i:=1 to n do
tmp:=tmp+p[i*(n+1)-n];
if not (tmp = Line(n)) then hurdle[3]:=false;
tmp:=0;
for j:=1 to n do
tmp:=tmp+p[(n-j)*n+j];
if not (tmp = Line(n)) then hurdle[4]:=false
end; { diagonal }
begin
found:=false;
for i:=1 to 4 do hurdle[i]:=true;
col;
if hurdle[1]=true then
begin
row;
if hurdle[2]=true then
begin
diagonal;
if (hurdle[3]=true) and (hurdle[4]=true) then
found:=true;
end
end
end; { search }
procedure perm(level:integer);
{$B=gNs$r:n$k(B}
var i,row : integer;
begin
if level >= n*n then begin
search;
if found then Print
end
else begin
row := level+1;
for i:=1 to n*n do
if Empty[i] then begin
Empty[i]:=false;
p[row]:=i;
count:=count+1;
perm(level+1);
Empty[i]:=true
end;
end;
end; { perm }
begin
writeln('3$B$+$i(B',Max);
readln(n);
writeln(Line(n));
count:=0;
shokika;
perm(0);
write('count=',count);
writeln
end.
$B$H$3$m$,$3$N%W%m%0%i%`$O(Bn=3$B$N;~$O$&$^$/$$$/$N$G$9$,!"(B
n=4$B0J>e$K$J$k$H;~4V$,$+$+$j$9$.$F$&$^$/$$$-$^$;$s!#(B
$B860x$H$7$F$O#1$+$i(Bn*n$B$^$G$N?t;z$r#p$H$$$&G[Ns$K(B
$B#1DL$jJB$Y$F$+$i!"$?$F!"2#!"<P$a$N9g7W$r(B
$BD4$Y$F$$$k$?$a$K(Bn=4$B0J>e$G$O;~4V$,$+$+$k$H$$$&(B
$B8=>]$,5/$3$C$F$7$^$&$h$&$G$9!#(B
$B%P%C%/%H%i%C%/$H$$$&<jK!$r<*$K$7$?$3$H$,$"$j$^$9$,!"(B
$B$=$l$r;H$C$?!"=$@5%W%m%0%i%`$r9M$($F$$$^$9$,!"(B
$B9T$-5M$^$C$F$$$^$9!#(B
$B2~NIE@!"$b$7$/$O%R%s%H$J$I$r65$($F$$$?$@$1$J$$$G$7$g$&$+!#(B
$B8@MU$,B-$j$J$1$l$P!"$I$s$I$sDI2C$7$F$$$-$^$9!#(B
$B;d$b:#0l@87|L?9M$($F$*$j$^$9!#(B
$B$h$m$7$/$*4j$$$7$^$9!#(B
$BEl5~9)6HBg3X9)3XIt>pJs9)3X2J#2G/(B
$B:4F#!!5.(B
E-mail address aem29351@biglobe.ne.jp
Home Page http://www2s.biglobe.ne.jp/~sattak/index.html
Technical Details
Message-ID:
<66hc29$add$1@meshsv230.tk.mesh.ad.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: ff90a,c808e475db5c7a6,start X-Google-Attributes: gidff90a,public From: "Takashi Sato" <aem29351@biglobe.ne.jp> Subject: 魔法陣 Date: 1997/12/09 Message-ID: <66hc29$add$1@meshsv230.tk.mesh.ad.jp> X-Deja-AN: 296330598 X-MimeOLE: Produced By Microsoft MimeOLE V4.71.1712.3 Organization: BIGLOBE dial-up user Newsgroups: fj.lang.pascal