• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Untitled

a guest Jun 12th, 2019 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <time.h>
4.
5. #define SIZE 8
6.
7. int isBoardvalid(int board[SIZE][SIZE], int Row[8]);
8. int printArray(int array[SIZE][SIZE]);
9. int clearColumn(int board[SIZE][SIZE], int Column);
10. int arrayAllZero(int board[SIZE][SIZE]);
11.
12. int main()
13. {
14.     srand(time(0));
15.
16.     int board[SIZE][SIZE] = { 0 }; // chessboard
17.     int Row[8] = { 0 }; // each column owns a queen , array Row record which row the queen is locate in each column
18.     int count = 0; // counter for how many times the creation and validation checking of the board
19.     int Column = 0; // there are 8 columns , each column owns a queen
20.
21.     while (1)
22.     {
23.         arrayAllZero(board);
24.
25.         // create a pattern randomly
26.         for (Column = 0; Column < SIZE; Column++)
27.         {
28.             Row[Column] = rand() % 8; // assign which row the queen is locate in each column randomly
29.         }
30.
31.         for (Column = 0; Column < SIZE; Column++)
32.         {
33.             board[Row[Column]][Column] = 1; // assign the location of queen value 1
34.         }
35.
36.         count++;
37.
38.         if (isBoardvalid(board, Row) == 0) // the pattern is valid
39.         {
40.             printf("The %d-th solution\n", count);
41.             printArray(board);
42.             return 0;
43.         }
44.
45.     }
46.     return 0;
47. }
48.
49. // Find if the board valid or not , array Row record the position of queens
50. // Return 0 if valid
51. // Return 1 if not valid
52. int isBoardvalid(int board[SIZE][SIZE], int Row[8])
53. {
54.     int Column = 0;
55.     int count = 0;
56.     int i = 0;
57.
58.     for (Column = 0; Column <= 7; Column++) // 8-1 = 7
59.     {
60.         // board[Row[Column]][Column] is the position of queen
61.
62.         for (i = -7; i <= 7; i++)
63.         {
64.             if (i != 0) // if i = 0 , it's the position of queen herself
65.             {
66.                 if (Column + i >= 0 && Column + i < 8 && board[Row[Column]][Column + i] != 0)
67.                 {
68.                     count++; // rule out same row
69.                 }
70.
71.                 if (Row[Column] + i >= 0 && Row[Column] + i < 8 && board[Row[Column] + i][Column] != 0)
72.                 {
73.                     count++; // rule out same column
74.                 }
75.
76.                 if (Row[Column] + i >= 0 && Row[Column] + i < 8 && Column + i >= 0 && Column + i < 8 && board[Row[Column] + i][Column + i] != 0)
77.                 {
78.                     count++; // rule out upper right diagonal
79.                 }
80.
81.                 if (Row[Column] + i >= 0 && Row[Column] + i < 8 && Column - i >= 0 && Column - i < 8 && board[Row[Column] + i][Column - i] != 0)
82.                 {
83.                     count++; // rule out lower left diagonal
84.                 }
85.             }
86.         }
87.     }
88.
89.     if (count == 0) // no queen attacks another
90.     {
91.         return 0; // the board is valid
92.     }
93.     else
94.     {
95.         return 1; // the board is not valid
96.     }
97. }
98.
99. // Print an array , mark the posiotion of queen
100. int printArray(int array[SIZE][SIZE])
101. {
102.     int i = 0;
103.     int j = 0;
104.
105.     for (i = 0; i < SIZE; i++)
106.     {
107.         printf("-----");
108.     }
109.     printf("-\n");
110.
111.     for (i = 0; i < SIZE; i++)
112.     {
113.         for (j = 0; j < SIZE; j++)
114.         {
115.
116.             if (array[i][j] == 1)
117.             {
118.
119.                 printf(". Q  ");
120.             }
121.             else
122.             {
123.                 printf(".    ");
124.             }
125.         }
126.         printf(".\n");
127.         for (j = 0; j < SIZE; j++)
128.         {
129.             printf("-----");
130.         }
131.         printf("-\n");
132.     }
133.     return 0;
134. }
135.
136. // Assign 0 to all the elements of assigned column
137. int clearColumn(int board[SIZE][SIZE], int Column)
138. {
139.     int i = 0;
140.     int j = 0;
141.
142.     for (i = 0; i < SIZE; i++)
143.     {
144.         board[i][Column] = 0;
145.     }
146.     return 0;
147. }
148.
149. // Assign 0 to all the array element
150. int arrayAllZero(int board[SIZE][SIZE])
151. {
152.     int i = 0;
153.     int j = 0;
154.
155.     for (i = 0; i < SIZE; i++)
156.     {
157.         for (j = 0; j < SIZE; j++)
158.         {
159.             board[i][j] = 0;
160.         }
161.     }
162.     return 0;
163. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top