কম্পিউটার

C++ এ প্রদত্ত শর্ত সহ গ্রিডে 8টি সংখ্যা পূরণ করুন


ধরুন আমরা প্রদত্ত চিত্রের আটটি বৃত্তের মধ্যে 1, 2, 3, 4, 5, 6, 7, 8 রাখতে চাই, এভাবে যে ক্রমানুসারে এর পাশে থাকা একটি সংখ্যার সংলগ্ন কোনো সংখ্যা নেই।

সুতরাং, যদি ইনপুট মত হয়

0 -
1
-
1
0
-
1
-
1
-
1
-
1
0 -
1
-
1
0

তাহলে আউটপুট হবে

C++ এ প্রদত্ত শর্ত সহ গ্রিডে 8টি সংখ্যা পূরণ করুন

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • N :=3, M :=4
  • বিবেচিত নয় :=-1
  • একটি ফাংশন সংজ্ঞায়িত করুন present_in_grid(), এটি গ্রিড নেবে[N][M], সংখ্যা,
  • আরম্ভ করার জন্য i :=0, যখন i
  • আরম্ভ করার জন্য j :=0, যখন j করুন
  • যদি গ্রিড[i, j] সংখ্যার সমান হয়, তাহলে −
    • সত্যে ফিরে আসুন
  • মিথ্যে ফেরত দিন
  • একটি ফাংশন isSafe() সংজ্ঞায়িত করুন, এটি গ্রিড[N][M], সারি, কল, সংখ্যা,
  • যদি সারি 0 এর মত হয় এবং col 1 এর মত হয়, তাহলে −
    • যদি present_in_grid(গ্রিড, num) অথবা |num - grid[row, col + 1]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল - 1]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল + 1]| <=1, তারপর −
      • মিথ্যে ফেরত দিন
  • অন্যথায় যখন সারি 0 এবং col 2 এর সমান হয়, তখন −
    • যদি present_in_grid(গ্রিড, num) অথবা |num - grid[row, col - 1]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল + 1]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল - 1]| <=1, তারপর −
      • মিথ্যে ফেরত দিন
  • অন্যথায় যখন সারিটি 1 এবং col 0 এর সমান হয়, তখন −
    • যদি present_in_grid(গ্রিড, num) অথবা |num - grid[row - 1, col + 1]| <=1 বা |সংখ্যা - গ্রিড[সারি, কল + 1]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল + 1]| <=1, তারপর −
    • মিথ্যে ফেরত দিন
  • অন্যথায় যখন সারি 1 এবং col 3 এর সমান, তখন −
    • যদি present_in_grid(গ্রিড, num) অথবা |num - grid[সারি - 1, col - 1]| <=1 বা |সংখ্যা - গ্রিড[সারি, কল - 1]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল - 1]| <=1, তারপর −
      • মিথ্যে ফেরত দিন
  • অন্যথায় যখন সারি 2 এবং col 1 এর সমান, তখন −
    • যদি present_in_grid(গ্রিড, num) অথবা |num - grid[সারি - 1, col - 1]| <=1 বা |সংখ্যা - গ্রিড[সারি - 1, কল]| <=1 বা |সংখ্যা - গ্রিড[সারি - 1, কল + 1]| <=1 বা |সংখ্যা - গ্রিড[সারি, কল + 1]| <=1, তারপর −
      • মিথ্যে ফেরত দিন
  • অন্যথায় যখন সারি 2 এবং col 2 এর সমান হয়, তখন −
    • যদি present_in_grid(গ্রিড, num) অথবা |num - grid[row, col - 1]| <=1 বা |সংখ্যা - গ্রিড[সারি - 1, কল]| <=1 বা |সংখ্যা - গ্রিড[সারি - 1, কল + 1]| <=1 বা |সংখ্যা - গ্রিড[সারি - 1, কল - 1]| <=1, তারপর −
      • মিথ্যে ফেরত দিন
  • অন্যথায় যখন সারি 1 এর মত এবং col 1 এর মত হয়, তখন −
    • যদি present_in_grid(গ্রিড, num) অথবা |num - grid[row, col - 1]| <=1 বা |সংখ্যা - গ্রিড[সারি - 1, কল]| <=1 বা |সংখ্যা - গ্রিড[সারি - 1, কল + 1]| <=1 বা |সংখ্যা - গ্রিড[সারি, কল + 1]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল + 1]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল]| <=1, তারপর −
      • মিথ্যে ফেরত দিন
  • অন্যথায় যখন সারি 1 এবং col 2 এর সমান হয়, তখন −
    • যদি present_in_grid(গ্রিড, num) অথবা |num - grid[row, col - 1]| <=1 বা |সংখ্যা - গ্রিড[সারি - 1, কল]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল - 1]| <=1 বা |সংখ্যা - গ্রিড[সারি, কল + 1]| <=1 বা |সংখ্যা - গ্রিড[সারি - 1, কল - 1]| <=1 বা |সংখ্যা - গ্রিড[সারি + 1, কল]| 1, তারপর −
      • মিথ্যে ফেরত দিন
  • সত্যে ফিরে আসুন
  • একটি ফাংশন সংজ্ঞায়িত করুন search_free_location(), এটি গ্রিড গ্রহণ করবে[N][M], সারি, কল,
    • সারি শুরু করার জন্য :=0, যখন সারি করুন
    • কল শুরু করার জন্য :=0, যখন col
    • যদি গ্রিড[সারি, কল] বিবেচনা করা হয় না, তাহলে -
      • সত্যে ফিরে আসুন
  • মিথ্যে ফেরত দিন
  • একটি ফাংশন সংজ্ঞায়িত করুন সমাধান(), এটি গ্রিড নিয়ে যাবে[N][M],
  • যদি search_free_location(গ্রিড, সারি, কল) মিথ্যা হয়, তাহলে −
    • সত্যে ফিরে আসুন
  • সংখ্যা শুরু করার জন্য :=1, যখন সংখ্যা <=8, আপডেট করুন (সংখ্যা 1 দ্বারা বৃদ্ধি করুন), করুন −
    • যদি নিরাপদ (গ্রিড, সারি, কল, সংখ্যা), তাহলে −
      • গ্রিড[সারি, কল] :=সংখ্যা
      • যদি সমাধান(গ্রিড) সত্য হয়, তাহলে −
        • সত্যে ফিরে আসুন
    • গ্রিড[সারি, কল] :=বিবেচনা করা হয়নি
  • মিথ্যে ফেরত দিন
  • উদাহরণ

    আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    #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

    1. প্রদত্ত নিয়ম সহ x রেঞ্জে দুটি সংখ্যা পেতে C++ কোড

    2. নির্দিষ্ট শর্তের সাথে গ্রাফ তৈরি করার জন্য C++ প্রোগ্রাম

    3. C++ এ প্রদত্ত মান সহ পাতা মুছুন

    4. C++ এ প্রদত্ত সূচক সহ N Fibonacci সংখ্যার GCD খুঁজুন