summaryrefslogtreecommitdiff
path: root/bcc/misc/test/8queens.t
blob: 8d20a4d301c7f967a1a9fe1dddef7a151cc4327b (plain)
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
/* 8queens - straightforward translation of pascal version */

#define TRUE 1
#define FALSE 0

int i;
char a[8],b[15],c[15],x[8];

main()
{
    for (i=0;i<8;i++)
		a[i]=TRUE;
    for (i=0;i<15;i++)
    	b[i]=TRUE;
    for (i=0;i<15;i++)
    	c[i]=TRUE;
    try(0);
}

print()
{
	int k;

    for	(k=0;k<8;k++)
		write(x[k]);
    writeln();
}

write(i)
int i;
{
	{
#asm
	LDA	#$20
	JSR	$E820
	LDD	.i,S
	JSR	$C682
#endasm
	}
}

writeln()
{
	{
#asm
	LDA	#13
	JSR	$E820
	LDA	#10
	JSR	$E820
#endasm
	}
}

try(i)
int i;
{
	int j;

    for(j=0;j<8;j++)
		if (a[j] && b[i+j] && c[7+i-j])
    {
		x[i]=j;
		a[j]=FALSE;
		b[i+j]=FALSE;
		c[7+i-j]=FALSE;
		if (i<7)
			try(i+1);
		else
			print();
        a[j]=TRUE;
		b[i+j]=TRUE;
		c[7+i-j]=TRUE;
    }
}