Đoạn code C++ này để làm gì?

#include<iostream> 
#define MAX 110 
#define REPi(i,m) for (int i=1; i<=(m); i++) 
#define REPj(j,n) for (int j=1; j<=(n); j++) 
using namespace std; 
 
void init(); 
void readInput(); 
void slover(); 
void PrintWriter(); 
void Loang(int, int); 
 
int m, n, result; 
int a[MAX][MAX], d[MAX][MAX]; // array a is main array; array d is trace array 
     
 
main() 
{ 
    init(); //initialize 
    readInput();  
    slover(); 
    PrintWriter(); 
} 
 
 
//init 
void init() 
{ 
    for (int i=0; i<=MAX+1; i++) 
    for (int j=0; j<=MAX+1; j++) 
    { 
        a[i][j] = 0;  
        d[i][j] = 0; 
    } 
} 
// 
void readInput() 
{ 
    cin>> m >> n ; 
    REPi(i,m) REPj(j,n) cin>>a[i][j]; 
} 
 
 
// 
void loang(int x, int y) 
{ 
    int X, Y; 
    int d1[] = {1,-1,0,0}; 
    int d2[] = {0,0,1,-1}; 
    d[x][y] = 1; 
    for (int i=0; i<=3; i++)  
    { 
        X = x + d1[i]; 
        Y = y + d2[i]; 
        if ((a[X][Y] == 1)&&(d[X][Y] == 0)){ 
            loang(X,Y); 
        } 
    } 
} 
// 
void slover() 
{ 
    result = 0; 
    REPi(i,m) REPj(j,n) 
    { 
        if ((a[i][j] == 1)&&(d[i][j] == 0)){ 
            loang(i,j); 
            result++; 
        } 
        else continue; 
    } 
} 
// 
void PrintWriter() 
{ 
    cout<<result; 
} 

Mình có đoạn code này, nhưng không hiểu bạn viết code này để tính caí gì. Mong mọi người chỉ dùm, cảm ơn! :slight_smile:

mình compile không có lỗi, chạy thì nó ra thế này: Segmentation fault

Đây có thể là thuật toán DFS trong ma trận. Thuật toán bị lặp vô hạn vì sau khi loang i,j không đánh dấu là đã loang tới d[i][j]=1

1 Like

Mình dùng php chạy nó tạo ra 2 ma trận có 111 hàng và 111 cột, nhưng tạo thế để làm gì nhỉ? mình vẫn chưa hiểu cái đề mà bạn này viết. Cảm ơn bạn nhé!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?