Mọi người cho em hỏi, nếu chuyển code Pascal này sang C++ thì như thế nào ạ?

procedure init;
var x, maxx, i: longint;

   procedure DFS(u: longint);
   var j: longint;
   begin
      if (value[u]>maxx) then
         begin
            x:= u;
            maxx:= value[u];
         end;
      for j:= 1 to n do
         if (a[u,j] and free[j]) then
            begin
               free[j]:= false;
               value[j]:= value[u]+1;
               DFS(j);
            end;
   end;

begin
   maxx:= 0;
   value[1]:= 1;
   for i:= 1 to n do free[i]:= true;
   free[1]:= false;
   DFS(1);
end;

Em muốn hỏi là có cách nào để thủ tục DFS sử dụng biến x và maxx của thủ tục init hay không mà không phải khai báo hai biến đó là cục bộ.

Nhân tiện cho em hỏi, cách cài đặt hai hàm lồng nhau như vậy gọi là gì ạ?

C++ không hỗ trợ các hàm lồng nhau bạn nhé. Nếu không muốn khai báo biến cục bộ thì bạn có thể truyền 2 biến đó vào thành tham số của hàm DFS.

Trả lời Nezx
  Hiện bài gốc

Oh, cám ơn nhé. Truyền tham số thì hơi dài dòng tí.

2 hàm lồng nhau gọi là nested function?

Thông thường nếu mục đích của bạn là gom 1 số hàm lại vào với nhau cho gọn thì có thể dùng struct/class của C++. Ví dụ như ở trên bạn có thể làm 1 struct Graph:

struct Graph {
public: // Hàm mà bên ngoài chương trình chính có thể dùng
  void init() {
    ...
  }

private: // Hàm chỉ dùng đc trong class Graph
  void DFS(int u) {
    ...
  }
};

 

Trả lời RR
  Hiện bài gốc

Em cám ơn nhá!