Algorithm backtracking giải Einstein problem

Em đang có bài toán là dùng backtracking để giải Einsteins problem.

Einsteins problem: https://web.stanford.edu/~laurik/fsmbook/examples/Einstein’sPuzzle.html

Facts about Einstein’s problem:
• There are 5 houses (along the street) in 5 different colors:

blue, green, red, white, and yellow.

• In each house lives a person of a different nationality:

Brit, Dane, German, Norwegian and Swede.

• These 5 owners drink a certain of beverage:

beer, coffee, milk, tea and water,

• These 5 owners smoke a certain brand of cigar:

Blue Master, Dunhill, Pall Mall, Prince and Blend,

• These 5 owners keep a certain pet:

cat, bird, dog, fish and horse.

• No owners have the same pet, smoke the same brand of cigar, or drink the

same beverage.

Hints and constraints:

• The Brit lives in a red house.
• The Swede keeps dogs as pets.
• The Dane drinks tea.
• The green house is on the left of the white house (next to it).
• The green house owner drinks coffee.
• The person who smokes Pall Mall rears birds.
• The owner of the yellow house smokes Dunhill.
• The man living in the house right in the center drinks milk.
• The Norwegian lives in the first house.
• The man who smokes Blend lives next to the one who keeps cats.
• The man who keeps horses lives next to the man who smokes Dunhill.
• The owner who smokes Blue Master drinks beer.
• The German smokes Prince.
• The Norwegian lives next to the blue house.
• The man who smokes Blend has a neighbor who drinks water.

Ý tưởng của em là tạo 1 mảng 2 chiều chứa những facts có sẵn rồi so sánh với những ràng buộc và hints để tạo ra cái hàm is_safe. Nhưng ko đc khả quan cho lắm.

Hiện tại em đang kẹt ở chỗ design input đầu vào cho bài toán để match với cái hints và constraints đã cho. Anh nào có cao kiến có thể cho em xin chút gợi ý đc ko ạ? Em cảm ơn ạ!

Như thấy trên VNOI rồi thì phải. :thinking:

2 Likes

Mình có đăng bài lên đó hỏi mà ko có ai rep. Bạn có thể cho mình xin cái link bài đó đc ko ạ?

Hi Jay,

Cậu có thể cho bọn tớ biết lý do sao design đấy lại không được khả quan cho lắm không?

Tớ nghĩ ý cậu muốn nói là “design cấu trúc dữ liệu” của bài toán.
Và cậu đã thử nghĩ ra những cách nào rồi? Có thể cho bọn tớ biết được không?

1 Like

Ý tưởng ban đầu của mình là sẽ làm 5 cái mảng 1 chiều, mỗi cái sẽ chứa colour, nation, bev, smoke, pet. Và 1 cái mảng 1 chiều nữa là criteria, criteria = colour + nation + bev + smoke + pet. Và 1 mảng 2 chiều chứa những hints và ràng buộc có sẵn.

Nhưng đang bị kẹt ở chỗ làm cái function is_safe để mình có thể build đc cái recursion tree

Bạn có cao kiến gì ko? Nếu có thì cho mình tham khảo nhé.

Not bad! Tớ nghĩ cấu trúc dữ liệu đó có thể giúp cậu giải quyết vấn đề.
[Question] Cậu định mô tả mảng 2 chiều với hints và ràng buộc như thế nào thế?

Có vẻ như cậu chỉ bị kẹt ở đây thôi.
[Question] Cậu có thể cho tớ biết hàm is_safe mà cậu định xây dựng dùng để làm gì vậy? Đầu vào của nó là gì? Đầu ra của nó là gì vậy?

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