latihan recursive

Oleh Hobart 0 0 pada Minggu, 31 Juli 2022, 15:47:57


Kembali ke forum umum


Petunjuk Diskusi
Silahkan masuk untuk berdiskusi



diberikan suatu grid n x m, cari area kumpulan "o" terbesar yang terhubung dari sisi (kanan/kiri/atas/bawah). "x" tidak bisa dilewatin.

input
4 4
x o x x
o o x o
o o x x
x x o o

output
5

ini kodingannya, tp jdny infinite loop, salahnya di mana yaa? 


int X, Y;
int check[10][10]={0};
    int answer=0;
    int num = 0;

void recursive(int y,char map[10][10],int x) {
    if (x < X) {
        if (map[y][x] == 'o') {
            if (check[y][x] == 0) {
                check[y][x] == 1;
                num++;
                if (check[y][x + 1] == 0) {
                    recursive(y, map, x + 1);
                }
                if (check[y][x - 1] == 0) {
                    recursive(y, map, x - 1);
                }
                if (check[y + 1][x] == 0) {
                    recursive(y+1, map, x );
                }
                if (check[y - 1][x ] == 0) {
                    recursive(y-1, map, x );
                }

                if (check[y][x + 1] == 1 && check[y][x - 1] == 1 && check[y - 1][x] == 1 && check[y + 1][x] == 1) {
                    if (answer < num) {
                        answer = num;
                        cout << answer;
                    num = 0;

                    }
                    
                }

            }

        }
        else {
            recursive(y, map, x + 1);
        }
    }
    else  {

        recursive(y + 1, map, 0);
    }
           
}
// 2 = 121, 3 = 1213121
int main() {
    char map[10][10];
    cin >> X>>Y;
    for (int i = 0; i < Y; i++) {
        for (int j = 0; j < X; j++) {
            cin >> map[i][j];
            if (map[i][j] == 'x') {
                check[i][j] = 1;
            }
        }
    }
    recursive(0, map, 0);

}
0 jempol




Belum ada tanggapan