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);
}
}
Bài liên quan
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 ạ .
Đệ 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 .
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.