-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrecursion1.c
More file actions
92 lines (86 loc) · 1.83 KB
/
recursion1.c
File metadata and controls
92 lines (86 loc) · 1.83 KB
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
#include<stdio.h>
#include<stdlib.h>
int board[10][10];
int is_attacked(int x,int y);
int find_position(int N);
int number_of_queens;
int main(int argc,char * argv[])
{
int x;
scanf("%d",&x);
number_of_queens = x;
int i,j;
if(find_position(number_of_queens))
{
printf("YES\n");
// print here the array
for(i=0; i<x; i++)
{
for(j=0;j<x;j++)
{
printf("%d ",board[i][j]);
}
printf("\n");
}
}
else
{
printf("NO\n");
}
}
int find_position(int N) {
/* code */
if (N==0)
{
return 1;
}
int i,j;
for(i=(number_of_queens-N); i < number_of_queens; i++)
{
for(j=(number_of_queens-N); j < number_of_queens; j++)
{
board[i][j] = 1;
if (is_attacked(i,j))
{
board[i][j] = 0;
continue;
}
if(find_position(N-1))
return 1;
}
}
return 0;
}
int is_attacked(int x,int y)
{
int i,j;
for(i=0; i<x; i++)
if (board[i][y] ==1)
{
//printf("debug %d %d\n",i,y);
return 1;
}
for(j=0; j<y; j++)
if(board[x][j]==1)
{
//printf("//debug2 %d %d\n",x,j);
return 1;
}
if (x&&y)
{
for(i=0; i<number_of_queens;i++)
{
for (j=0; j<number_of_queens; j++)
{
if((((i+j)==(x+y)) && board[i][j]==1 && i!=x)
|| (((i-j)==(x-y)) && board[i][j]==1 && i!=x))
{
printf("debug board%d :%d %d\n",board[i][j],i,j);
printf("debug 1%d %d\n",x,y);
return 1;
}
}
}
}
return 0;
}