Computer >> Máy Tính >  >> Lập trình >> C ++

Tạo danh sách liên kết từ ma trận 2D trong C ++


Giả sử chúng ta có một ma trận, chúng ta phải chuyển nó thành danh sách liên kết 2d bằng cách sử dụng phương pháp đệ quy.

Danh sách sẽ có con trỏ bên phải và con trỏ xuống.

Vì vậy, nếu đầu vào giống như

10 20 30
40 50 60
70 80 90

thì đầu ra sẽ là

Tạo danh sách liên kết từ ma trận 2D trong C ++

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm make_2d_list (), điều này sẽ lấy mat ma trận, i, j, m, n,

  • nếu tôi và j không nằm trong ranh giới ma trận, thì -

    • trả về null

  • temp:=tạo một nút mới với giá trị mat [i, j]

  • quyền tạm thời:=make_2d_list (mat, i, j + 1, m, n)

  • giảm nhiệt độ:=make_2d_list (mat, i + 1, j, m, n)

  • trở lại nhiệt độ

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
class TreeNode {
   public:
   int data;
   TreeNode *right, *down;
   TreeNode(int d){
      data = d;
      right = down = NULL;
   }
};
void show_2d_list(TreeNode* head) {
   TreeNode *right_ptr, *down_ptr = head;
   while (down_ptr) {
      right_ptr = down_ptr;
      while (right_ptr) {
         cout << right_ptr->data << " ";
         right_ptr = right_ptr->right;
      }
      cout << endl;
      down_ptr = down_ptr->down;
   }
}
TreeNode* make_2d_list(int mat[][3], int i, int j, int m, int n) {
   if (i > n - 1 || j > m - 1)
      return NULL;
   TreeNode* temp = new TreeNode(mat[i][j]);
   temp->right = make_2d_list(mat, i, j + 1, m, n);
   temp->down = make_2d_list(mat, i + 1, j, m, n);
   return temp;
}
int main() {
   int m = 3, n = 3;
   int mat[][3] = {
      { 10, 20, 30 },
      { 40, 50, 60 },
      { 70, 80, 90 } };
   TreeNode* head = make_2d_list(mat, 0, 0, m, n);
   show_2d_list(head);
}

Đầu vào

{ { 10, 20, 30 },
{ 40, 50, 60 },
{ 70, 80, 90 } }

Đầu ra

10 20 30
40 50 60
70 80 90