01/10/2018, 12:13

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);
            }
        }
HK boy viết 14:17 ngày 01/10/2018
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ĩ.

hiếu viết 14:25 ngày 01/10/2018

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 ạ .

hiếu viết 14:19 ngày 01/10/2018

  • EM thử đủ kiểu rồi mà nó vẫn k được bác chỉ giúp em với ạ .
HK boy viết 14:14 ngày 01/10/2018

Đệ 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’).

hiếu viết 14:19 ngày 01/10/2018

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

hiếu viết 14:15 ngày 01/10/2018

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

Trần Hoàn viết 14:15 ngày 01/10/2018

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.

Bài liên quan
0