मान लीजिए कि हम दी गई आकृति के आठ वृत्तों में 1, 2, 3, 4, 5, 6, 7, 8 को इस प्रकार रखना चाहते हैं कि कोई भी संख्या उस संख्या के निकट न हो जो क्रम में उसके बगल में हो।
तो, अगर इनपुट पसंद है
| 0 | <टीडी>-0 |
| - 1 | <टीडी>- |
| 0 | <टीडी>-0 |
तो आउटपुट होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- N :=3, M :=4
- नहीं माना गया:=-1
- एक फ़ंक्शन present_in_grid() परिभाषित करें, यह ग्रिड लेगा[N][M], num,
- इनिशियलाइज़ i :=0 के लिए, जब i
- इनिशियलाइज़ j :=0 के लिए, जब j
करें - यदि ग्रिड[i, j] संख्या के समान है, तो −
- सही लौटें
- इनिशियलाइज़ j :=0 के लिए, जब j
- अगर present_in_grid(grid, num) या |num - grid[row, col + 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम - 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम + 1]| <=1, फिर −
- झूठी वापसी
- अगर present_in_grid(grid, num) या |num - grid[row, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम - 1]| <=1, फिर −
- झूठी वापसी
- अगर present_in_grid(grid, num) या |num - grid[row-1, col + 1]| <=1 या |संख्या - ग्रिड[पंक्ति, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम + 1]| <=1, फिर -
- झूठी वापसी
- अगर present_in_grid(grid, num) या |num - grid[row-1, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति, कॉलम - 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम - 1]| <=1, फिर −
- झूठी वापसी
- अगर present_in_grid(grid, num) या |num - grid[row-1, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, col]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति, कॉलम + 1]| <=1, फिर −
- झूठी वापसी
- अगर present_in_grid(grid, num) या |num - grid[row, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, col]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, कॉलम - 1]| <=1, फिर −
- झूठी वापसी
- अगर present_in_grid(grid, num) या |num - grid[row, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, col]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम]| <=1, फिर −
- झूठी वापसी
- अगर present_in_grid(grid, num) या |num - grid[row, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, col]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम - 1]| <=1 या |संख्या - ग्रिड[पंक्ति, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, कॉलम - 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम]| 1, फिर −
- झूठी वापसी
- इनिशियलाइज़ रो के लिए:=0, जब रो
- इनिशियलाइज़ col :=0 के लिए, जब col
- यदि ग्रिड[पंक्ति, col] NOTCONSIDERED के समान है, तो −
- सही लौटें
- इनिशियलाइज़ col :=0 के लिए, जब col
- सही लौटें
- करें
- यदि सुरक्षित है (ग्रिड, पंक्ति, कॉलम, संख्या), तो −
- ग्रिड[पंक्ति, कॉलम] :=संख्या
- यदि हल (ग्रिड) सत्य है, तो −
- सही लौटें
- ग्रिड [पंक्ति, col] :=विचार नहीं किया गया
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <cmath>
#include <iostream>
#define N 3
#define M 4
#define NOTCONSIDERED -1
using namespace std;
bool present_in_grid(int grid[N][M], int num) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++)
if (grid[i][j] == num)
return true;
}
return false;
}
bool isSafe(int grid[N][M], int row, int col, int num) {
if (row == 0 && col == 1) {
if (present_in_grid(grid, num) || (abs(num - grid[row][col + 1]) <= 1) || (abs(num - grid[row + 1][col]) <= 1) || (abs(num - grid[row + 1][col - 1]) <= 1) || (abs(num - grid[row + 1][col + 1]) <= 1))
return false;
}
else if (row == 0 && col == 2) {
if (present_in_grid(grid, num) || (abs(num - grid[row][col - 1]) <= 1) || (abs(num - grid[row + 1][col]) <= 1) || (abs(num - grid[row + 1][col + 1]) <= 1) || (abs(num - grid[row + 1][col - 1]) <= 1))
return false;
}
else if (row == 1 && col == 0) {
if (present_in_grid(grid, num) || (abs(num - grid[row - 1][col + 1]) <= 1) || (abs(num - grid[row][col + 1]) <= 1) || (abs(num - grid[row + 1][col + 1]) <= 1))
return false;
}
else if (row == 1 && col == 3) {
if (present_in_grid(grid, num) || (abs(num - grid[row - 1][col - 1]) <= 1) || (abs(num - grid[row][col - 1]) <= 1) || (abs(num - grid[row + 1][col - 1]) <= 1))
return false;
}
else if (row == 2 && col == 1) {
if (present_in_grid(grid, num) || (abs(num - grid[row - 1][col - 1]) <= 1) || (abs(num - grid[row - 1][col]) <= 1) || (abs(num - grid[row - 1][col + 1]) <= 1) || (abs(num - grid[row][col + 1]) <= 1))
return false;
}
else if (row == 2 && col == 2) {
if (present_in_grid(grid, num) || (abs(num - grid[row][col - 1]) <= 1) || (abs(num - grid[row - 1][col]) <= 1) || (abs(num - grid[row - 1][col + 1]) <= 1) || (abs(num - grid[row - 1][col - 1]) <= 1))
return false;
}
else if (row == 1 && col == 1) {
if (present_in_grid(grid, num) || (abs(num - grid[row][col - 1]) <= 1) || (abs(num - grid[row - 1][col]) <= 1) || (abs(num - grid[row - 1][col + 1]) <= 1) || (abs(num - grid[row][col + 1]) <= 1) || (abs(num - grid[row + 1][col + 1]) <= 1) || (abs(num - grid[row + 1][col]) <= 1))
return false;
}
else if (row == 1 && col == 2) {
if (present_in_grid(grid, num) || (abs(num - grid[row][col - 1]) <= 1) || (abs(num - grid[row - 1][col]) <= 1) || (abs(num - grid[row + 1][col - 1]) <= 1) || (abs(num - grid[row][col + 1]) <= 1) || (abs(num - grid[row - 1][col - 1]) <= 1) || (abs(num - grid[row + 1][col]) <= 1))
return false;
}
return true;
}
bool search_free_location(int grid[N][M], int& row, int& col) {
for (row = 0; row < N; row++)
for (col = 0; col < M; col++) {
if (grid[row][col] == NOTCONSIDERED)
return true;
}
return false;
}
void show_res(int grid[N][M]) {
for (int i = 0; i < N; i++) {
if (i == 0 || i == N - 1)
cout << " ";
for (int j = 0; j < M; j++) {
if (grid[i][j] == 0)
cout << " ";
else
cout << grid[i][j] << " ";
}
cout << endl;
}
}
bool Solve(int grid[N][M]) {
int row, col;
if (!search_free_location(grid, row, col))
return true;
for (int num = 1; num <= 8; num++) {
if (isSafe(grid, row, col, num)) {
grid[row][col] = num;
if (Solve(grid))
return true;
grid[row][col] = NOTCONSIDERED;
}
}
return false;
}
int main(){
int grid[N][M] = { { 0, -1, -1, 0 },
{ -1, -1, -1, -1 },
{ 0, -1, -1, 0 } };
if (Solve(grid))
show_res(grid);
else
cout << "Not possible";
} इनपुट
{ { 0, -1, -1, 0 },
{ -1, -1, -1, -1},
{ 0, -1, -1, 0 }} आउटपुट
3 5 7 1 8 2 4 6