-
Notifications
You must be signed in to change notification settings - Fork 0
/
checker.pas
97 lines (76 loc) · 1.34 KB
/
checker.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
{### PROGRAM}
{
ID: ...
LANG: PASCAL
PROG: checker
}
uses
sysutils;
var
f,f2 : Text;
row,colu : array[1..13] of byte;
udiag,ddiag : array[1..26] of byte;
n,times: byte;
solutions:longint;
procedure toFile;
var
k,j : byte;
begin
Assign(f2,'checker.out');
if (times=0) then
Rewrite(f2)
else
Append(f2);
for k := 1 to n-1 do
begin
write(f2,colu[k]);
write(f2,' ');
end; { for }
writeln(f2,colu[n]);
Close(f2);
end;
procedure solve(col : byte);
var
i,j,k: byte;
begin
if (col = n + 1) then
begin
if (times<3) then
begin
toFile;
times := times + 1;
end;
solutions := solutions + 1
end
else
begin
for i := 1 to n do
begin { for }
if ((row[i]=0) and (udiag[i+col]=0) and (ddiag[i-col+n]=0)) then
begin
colu[col] := i;
row[i] := row[i] + col ;
udiag[i+col] := udiag[i+col] + 1;
ddiag[i-col+n] := ddiag[i-col+n] + 1;
solve(col+1);
row[i] := row[i] - col;
udiag[i+col] := udiag[i+col] - 1;
ddiag[i-col+n] := ddiag[i-col+n] - 1;
end;
end; { for }
end;
end;
begin
Assign(f,'checker.in');
Reset(f);
readln(f,n);
Close(f);
solutions := 0;
times := 0;
solve(1);
Assign(f2,'checker.out');
Append(f2);
writeln(f2,solutions);
Close(f2);
end.
{### END}