30/09/2018, 18:23

Cho mình hỏi đ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!

kid1412 viết 20:23 ngày 30/09/2018

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

Gió viết 20:25 ngày 30/09/2018

Đâ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

kid1412 viết 20:23 ngày 30/09/2018

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é!

Bài liên quan
0