Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में दी गई शर्तों के साथ ग्रिड में 8 नंबर भरें

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

तो, अगर इनपुट पसंद है

<टीडी>-
1
<टीडी>-
1
<टीडी>-
1
<टीडी>-
1
<टीडी>-
1
<टीडी>-
1
<टीडी>-
1
0 0
-
1
0 0

तो आउटपुट होगा

C++ में दी गई शर्तों के साथ ग्रिड में 8 नंबर भरें

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • N :=3, M :=4
  • नहीं माना गया:=-1
  • एक फ़ंक्शन present_in_grid() परिभाषित करें, यह ग्रिड लेगा[N][M], num,
  • इनिशियलाइज़ i :=0 के लिए, जब i
  • इनिशियलाइज़ j :=0 के लिए, जब j करें
  • यदि ग्रिड[i, j] संख्या के समान है, तो −
    • सही लौटें
  • झूठी वापसी
  • एक फ़ंक्शन को परिभाषित करें isSafe(), यह ग्रिड लेगा[N][M], पंक्ति, कॉलम, संख्या,
  • यदि पंक्ति 0 के समान है और col 1 के समान है, तो −
    • अगर present_in_grid(grid, num) या |num - grid[row, col + 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम - 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम + 1]| <=1, फिर −
      • झूठी वापसी
  • अन्यथा जब पंक्ति 0 के समान हो और col 2 के समान हो, तो −
    • अगर present_in_grid(grid, num) या |num - grid[row, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम - 1]| <=1, फिर −
      • झूठी वापसी
  • अन्यथा जब पंक्ति 1 के समान हो और col 0 के समान हो, तो −
    • अगर present_in_grid(grid, num) या |num - grid[row-1, col + 1]| <=1 या |संख्या - ग्रिड[पंक्ति, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम + 1]| <=1, फिर -
    • झूठी वापसी
  • अन्यथा जब पंक्ति 1 के समान हो और col 3 के समान हो, तो −
    • अगर present_in_grid(grid, num) या |num - grid[row-1, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति, कॉलम - 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम - 1]| <=1, फिर −
      • झूठी वापसी
  • अन्यथा जब पंक्ति 2 के समान हो और col 1 के समान हो, तो −
    • अगर present_in_grid(grid, num) या |num - grid[row-1, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, col]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति, कॉलम + 1]| <=1, फिर −
      • झूठी वापसी
  • अन्यथा जब पंक्ति 2 के समान हो और col 2 के समान हो, तो −
    • अगर present_in_grid(grid, num) या |num - grid[row, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, col]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, कॉलम - 1]| <=1, फिर −
      • झूठी वापसी
  • अन्यथा जब पंक्ति 1 के समान हो और col 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, फिर −
      • झूठी वापसी
  • अन्यथा जब पंक्ति 1 के समान हो और col 2 के समान हो, तो −
    • अगर present_in_grid(grid, num) या |num - grid[row, col - 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, col]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम - 1]| <=1 या |संख्या - ग्रिड[पंक्ति, कॉलम + 1]| <=1 या |संख्या - ग्रिड[पंक्ति - 1, कॉलम - 1]| <=1 या |संख्या - ग्रिड[पंक्ति + 1, कॉलम]| 1, फिर −
      • झूठी वापसी
  • सही लौटें
  • एक फ़ंक्शन को परिभाषित करें search_free_location(), यह ग्रिड लेगा [एन] [एम], पंक्ति, कॉलम,
    • इनिशियलाइज़ रो के लिए:=0, जब रो
    • इनिशियलाइज़ col :=0 के लिए, जब col
    • यदि ग्रिड[पंक्ति, col] NOTCONSIDERED के समान है, तो −
      • सही लौटें
  • झूठी वापसी
  • एक फ़ंक्शन को परिभाषित करें हल करें(), यह ग्रिड लेगा[एन][एम],
  • यदि search_free_location(grid, row, col) गलत है, तो −
    • सही लौटें
  • इनिशियलाइज़ num :=1 के लिए, जब num <=8, अपडेट करें (1 से num बढ़ाएँ), −
      करें
    • यदि सुरक्षित है (ग्रिड, पंक्ति, कॉलम, संख्या), तो −
      • ग्रिड[पंक्ति, कॉलम] :=संख्या
      • यदि हल (ग्रिड) सत्य है, तो −
        • सही लौटें
    • ग्रिड [पंक्ति, 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

    1. C++ प्रोग्राम कुछ शर्तों के साथ ग्राफ बनाने के लिए

      मान लीजिए कि हमारे पास दो नंबर एन और के हैं। विचार करें कि एन तत्वों के साथ एक अप्रत्यक्ष ग्राफ है। N शीर्ष निम्नलिखित शर्तों को पूरा करते हैं - ग्राफ़ सरल और जुड़ा हुआ है शीर्षों की संख्या 1 से N तक होती है मान लीजिए कि ग्राफ में किनारों की संख्या M है। किनारों को 1 से M तक क्रमांकित किया

    1. C++ में दिए गए मान के साथ पत्ते हटाएं

      मान लीजिए कि हमारे पास एक बाइनरी ट्री और एक पूर्णांक लक्ष्य है, हमें मूल्य लक्ष्य वाले सभी लीफ नोड्स को हटाना होगा। हमें यह ध्यान रखना होगा कि एक बार जब हम एक मूल्य लक्ष्य के साथ एक लीफ नोड को हटा देते हैं, यदि यह मूल नोड एक लीफ नोड बन जाता है और इसका मूल्य लक्ष्य होता है, तो इसे भी हटा दिया जाना चा

    1. C++ में दिए गए सूचकांकों के साथ N फाइबोनैचि संख्याओं की GCD ज्ञात कीजिए

      यहाँ हमें दिए गए सूचकांकों के साथ n फाइबोनैचि पदों की GCD ज्ञात करनी है। तो सबसे पहले हमें अधिकतम सूचकांक प्राप्त करना होगा, और फाइबोनैचि शब्द उत्पन्न करना होगा, कुछ फाइबोनैचि शब्द इस प्रकार हैं:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ….. सूचकांक शुरू होता है 0 से। तो तत्व 0th . पर सूचकांक 0 है। यदि हमें स