2010-05-20 16 views
14

Hãy nói rằng bạn có một mạng lưới như thế này (làm một cách ngẫu nhiên):Tìm con đường ngắn nhất đến thăm tất cả các hình vuông không bị chặn trên một mạng lưới

grid

Bây giờ giả sử bạn có một chiếc xe bắt đầu một cách ngẫu nhiên từ một của các ô trong khi nào, đường dẫn ngắn nhất ngắn nhất là gì để đi qua từng hộp màu trắng? Bạn có thể ghé thăm từng ô màu trắng bao nhiêu lần tùy thích và không thể nhảy qua các ô đen. Các hộp đen giống như bức tường. Nói một cách đơn giản, bạn chỉ có thể chuyển từ hộp trắng sang hộp trắng.

Bạn có thể di chuyển theo bất kỳ hướng nào, thậm chí theo đường chéo.

Hai subquestions:

  1. Giả sử bạn biết vị trí của tất cả các hộp đen trước khi chuyển.
  2. Giả sử bạn chỉ biết vị trí của một hộp đen khi bạn đang ở trong một hộp màu trắng bên cạnh nó.
+0

"đường dẫn ngắn nhất để đi qua từng hộp màu trắng" là gì? Bạn đang hỏi gì ở đây? Bạn có nghĩa là "để đi đến mỗi một trong các hộp màu trắng"? – naiad

+0

Yea .. bạn chỉ cần đi qua tất cả các ô màu trắng. – Laz

+0

Để tìm đường đi ngắn nhất, bạn phải thực hiện tìm kiếm vũ lực. Nó không thực sự quan trọng nếu bạn biết các hộp đen lên phía trước hay không. – mdma

Trả lời

-1

Cố gắng xây dựng nó như một đồ thị (trong đó mỗi nút có ít nhất 8 nút khác) và đối xử với nó như http://en.wikipedia.org/wiki/Travelling_salesman_problem

+0

-1 Thực tế là nó có thể được giảm xuống một vấn đề NP-complete (mà bạn thậm chí không hiển thị) không giúp được gì nhiều hơn là nói với anh ta để bạo lực. –

+0

@BlueRaja: chỉ vì bạn không thích câu trả lời, điều đó không sai. Tôi sẽ đưa -1 cho glowcoder vì câu trả lời của anh ấy bỏ qua thực tế rằng TSP bình thường cần mỗi thành phố được truy cập chính xác một lần, không phải là mô hình thích hợp ở đây, bởi vì người ta cần phải truy cập một số hộp màu trắng nhiều lần. –

+0

TSP không yêu cầu mỗi lần truy cập chính xác một lần. Nó chỉ quan tâm đến con đường ngắn nhất giữa hai thành phố bất kể nó đi qua một thành phố mà nó đã đi trên đường đi. Không có vấn đề làm thế nào bạn cắt nó đây là một vấn đề khó khăn NP, và tôi tin rằng nó là tốt nhất tiếp cận bằng cách sử dụng cùng một cách tiếp cận như TSP. – corsiKa

0

này tương tự như vấn đề Knights Tour, nơi một giải pháp điển hình đánh giá tất cả các tuyến đường có thể có nguồn gốc từ hình vuông bắt đầu. Khi một tour du lịch không thể hoàn thành, sau đó backtracking được sử dụng để trở về để sao lưu trên các quyết định trước đó. Vấn đề của bạn thoải mái hơn vì bạn có thể ghé thăm các ô vuông nhiều lần. Các tour du lịch Knights và Du lịch Saleman vấn đề thường yêu cầu truy cập vào mỗi hình vuông chính xác một lần.

Xem http://en.wikipedia.org/wiki/Knight's_tour

+0

Nếu bạn có thể truy cập vào các ô vuông nhiều lần, bạn xác định khi nào một chuyến tham quan không thể hoàn thành (và do đó đã đến lúc bắt đầu quay lại)? Thông thường, điều này được xác định khi tất cả các ô vuông lân cận đã được truy cập - nhưng điều đó không còn áp dụng nếu bạn có thể truy cập chúng hai lần :-) – psmears

+0

Bạn có thể thực hiện phân tích khả năng hiển thị từ sqaure đến square - ví dụ: đánh giá tất cả các đường dẫn từ một hình vuông nguồn đến một ô vuông đích. Ở đây, bạn tránh chu kỳ, chúng tôi chỉ cần một con đường, vì vậy mỗi ô vuông được truy cập chỉ một lần. Ví dụ, hãy xem xét một bảng, nơi các hình vuông màu đen xuống phân vùng trung tâm nó thành hai nửa. Các ô vuông trong nửa bạn bắt đầu là có thể truy cập, các ô vuông trong nửa còn lại thì không. – mdma

4

Bạn nên mô hình các vấn đề như một đồ thị hoàn chỉnh, nơi khoảng cách giữa hai nút (hộp trắng) là chiều dài của con đường ngắn nhất giữa các nút. Độ dài đường dẫn có thể được tính toán bằng thuật toán Floyd-Warshall. Sau đó, bạn có thể coi nó là "Traveling salesman", như bộ phát sáng đã viết.

CHỈNH SỬA: để làm rõ hơn: bạn có thể mô tả từng con đường "thú vị" thông qua mê cung theo một chuỗi khác nhau hộp màu trắng. Bởi vì nếu bạn có một con đường tùy ý truy cập vào mỗi hộp màu trắng, bạn có thể chia nó thành các đường dẫn con, mỗi con đường kết thúc tại một ô trắng mới không được truy cập từ trước đến nay. Mỗi đường dẫn con từ hộp màu trắng từ A đến B có thể được thay thế bằng một đường con ngắn nhất từ ​​A đến B, đó là lý do tại sao bạn cần ma trận đường đi ngắn nhất giữa tất cả các cặp-của-nút.

+0

Điều này khá phức tạp. TSP áp dụng trực tiếp. Tại sao lại đi qua Floyd-Warshall?-1 cho đến khi bạn xây dựng thêm. –

+0

@Moron: từ Wikipedia, câu đầu tiên: "nhiệm vụ là tìm một chuyến đi ngắn nhất có thể ghé thăm mỗi thành phố * chính xác một lần *". Đó là những gì đề nghị của tôi làm: cho phép để xem vấn đề như là một vấn đề TSP của loại đó, ngay cả khi bạn phải truy cập vào mỗi hình vuông nhiều hơn một lần. –

+0

@Doc: Tôi thấy những gì bạn đang nhận được. Tôi sẽ loại bỏ -1. Vẫn còn khá phức tạp mặc dù. Tôi đã xóa một không gian để cho phép tôi hoàn tác -1. –

1

Điều này có vẻ là sự cố NP-Complete.

Đường dẫn Hamilton trong đồ thị lưới là NP-Complete đã được hiển thị ở đây: Hamilton Paths in Grid Graphs.

Lưu ý đồ thị lưới = biểu đồ con của lưới hoàn chỉnh.

Tất nhiên, tôi chưa đọc bài báo đó, vì vậy hãy xác nhận nó trước, đặc biệt là chuyển động chéo cho phép một phần.

+0

Làm cách nào để giảm bớt việc tìm đường dẫn Hamilton? Ông nói rõ ràng rằng bạn có thể ghé thăm mỗi hộp màu trắng thường xuyên như bạn muốn, mà không phải là trường hợp trong một con đường Hamilton. – bnaul

+0

@bnaul: Việc giảm tương tự như http://stackoverflow.com/questions/2359345/non-cycle-path-to-all-nodes/2360303#2360303 có thể sẽ hoạt động. –

1

Tài liệu đã nhận được. Tôi sẽ thêm rằng các hộp đen chỉ thay đổi khoảng cách giữa tất cả các cặp hộp màu trắng. Xây dựng thêm - nếu có một hộp đen trên đường chéo giữa bất kỳ hai hộp màu trắng nào (dễ kiểm tra), bạn cần tính toán đường đi ngắn nhất để lấy khoảng cách. Khi bạn có ma trận khoảng cách, hãy giải quyết TSP hoặc Đường dẫn Hamilton bằng cách giải quyết TSP sau khi tạo nút giả có độ dài bằng 0 cho tất cả các nút khác.

Điều quan trọng là để xây dựng và giải quyết TSP (hoặc bất kỳ công thức vấn đề nào cho vấn đề đó), bạn PHẢI có ma trận khoảng cách để bắt đầu. Ma trận khoảng cách không được chỉ định ở đầu nên nó phải được phát triển từ đầu.

1

trong khi phương pháp phỏng đoán dựa trên TSP là một cách tiếp cận hợp lý, không rõ nó đưa ra câu trả lời tối ưu. Vấn đề (như Moron chỉ ra) là vấn đề đường mòn kéo dài, và trong liên kết được cung cấp trong nhận xét, có nhiều trường hợp đặc biệt mà có các giải pháp tối ưu thời gian tuyến tính. Một điều khiến cho vấn đề của OP khác với công thức đồ thị lưới được sử dụng trong bài báo là khả năng đi qua đường chéo, thay đổi trò chơi khá một chút.