Thuật toán Loang trong C#

Em gặp rắc rối khi cài đặt thuật toán Loang trong . Em gọi đệ quy thì toàn báo stack overflow . Em không hiểu lỗi là ở đâu mong mọi người giúp đỡ . Em cài đặt như thế này

 private void Loang(int x , int y)
        {
            if (btnGame[x][y].Text == "0" )
            {
                btnGame[x][y].BackColor = Color.Blue;
                btnGame[x][y].Refresh();
            if(x+1 < btnGame.Count)
                Loang(x + 1, y);
            if(x-1 >= 0)
                Loang(x - 1, y);
            if(y+1 < btnGame[x].Count)
                Loang(x, y - 1);
            if(y-1 >= 0)
                Loang(x, y + 1);
            }
        }

Chỗ này sai. Còn sai như thế nào thì bạn cố gắng nhìn cho kĩ.

Do lúc đó em viết vội ạ . sửa lại y-1 <-> y+1 nó vẫn báo lỗi full stack ạ . Em thử dùng khử đệ quy cũng không được ạ . :frowning:

  • EM thử đủ kiểu rồi mà nó vẫn k được bác chỉ giúp em với ạ .

Đệ quy quá sâu. Bạn cứ đi cả vào những ô đã tô màu rồi, thành ra bạn cứ đi vòng vòng quanh cả cái table.

Tốt nhất là trong lúc duyệt những khả năng tiếp theo, bạn xem ô nào chưa được tô màu thì mới đi đến ô đó. Ví dụ, nếu ô (x’, y’) thuộc table mà chưa tô màu thì bước tiếp theo của ô (x, y) là ô (x’, y’).

à hình như em hiểu ra được điều gì đó rồi . Cảm ơn bác ạ .

Cảm ơn bác nhiều nha . EM đã gỡ xong cái đống tơ vò ấy rồi . :slight_smile:

Stackoverflow, 90% là do đệ quy quá sâu
Mà đệ quy quá sâu, một là do Input quá to, hai là do thuật toán lỗi dẫn đến đệ quy không dừng được.

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