Vì sao code không chạy được ra đáp án

Mọi người cho mình hỏi ngu cái là tại sao cái này nó không ra kết quả, chuyển code từ C++ sang python vì mình ít khi dùng python code DSA nên không rõ lắm, cảm ơn mọi người

  • Mình chạy file bằng câu lệnh python3 tên file, rồi nhập các đầu vào nhưng khi enter nó không xuất ra ouput

lỡ hàm reach của bạn chạy mãi mà nó không có return gì hết thì sao?

2 Likes

đúng rồi bạn ơi, nó chạy mãi, không hiểu sao, nhưng mình upcode lên thì vẫn pass nhưng test ở máy của mình thì chạy mãi

Copy code lên đây đi bạn ơi, ngồi gõ lại hết mớ đó mệt lắm.
Nhưng trước mắt, mình có thể góp ý là những cái if else bên trong loop, nếu có thể thì nên viết thành functions (bên ngoài loop), và gọi function khi chạy loop thôi. Như vậy sẽ giúp loop chạy nhanh hơn và code của mình dễ đọc hơn (hạn chế nhưng bug về logic do bất cẩn)

1 Like

cảm ơn góp ý của bạn

#Uses python3

import sys

def reach(visited, adj, x, y):

    if not visited[x]:
        visited[x] = True

        if adj[x]:
            for i in adj[x]:

                if i == y:
                    return 1

                elif not visited[x]:
                    if reach(visited, adj, i, y):
                        return 1

    return 0

if __name__ == '__main__':
    input = sys.stdin.read()
    data = list(map(int, input.split()))

    n, m = data[0:2]
    data = data[2:]
    edges = list(zip(data[0:(2*m):2], data[1:(2*m):2]))

    x, y = data[2*m]
    adj = [[] for _ in range(n)]
    visited = [ (False) for _ in range(n)]
    x,y = x -1, y-1

    for (a,b) in edges:
        adj[a-1].append(b-1)
        adj[b-1].append(a-1)

    print(reach(visited, adj, x, y))
1 Like

oke bạn, cái sys lại gọi bằng console bạn nhỉ, nếu thay bằng input() oke hơn chạy bằng terminal, có cách nào chạy cái sys bằng terminal ko bạn ơi

1 Like

@TaoLaoBidaoBanBanhBa

Phát biểu này là không đúng nha, call 1 function sẽ có cost để alloc stack và các thứ cần thiết do đó sẽ chậm hơn chứ không nhanh hơn được.
Nhưng nên tách thành các function nhỏ thực hiện chức năng cụ thể nếu có thể. Không nên tách quá nhiều vì sẽ overhead nhưng cũng không nên dồn hết tất cả vào 1 function vì sẽ khó maintain

Bạn có thể dùng pipe khi gọi trên console. Tuy nhiên chưa rõ lí do bạn sử dụng như trên mà không sử dụng input nhỉ

5 Likes

Mới test thử, đúng là chậm hơn thật, chậm hơn nhiều là đằng khác :frowning:

2 Likes

mình thử dùng thôi bạn :))), kiểu ko hiểu lắm, tại sao người ta ra cái sys làm gì khi dùng được input :)))

chắc họ dùng để pipe command, code này bạn copy từ hệ thống test tự động à

2 Likes

mình ko biết hệ thống test tự động :))), code này là bài tập trong khóa DSA trên Coursera , mình chỉ code phần hàm reach vì hay code C++ nên phần dưới khởi tạo hay dùng input nay thấy họ dùng sys thì tra thấy cũng input đầu vào nhưng mình lại ko chạy được trên terminal nên mang lên hỏi mọi người :))

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