शमौन के जवाब पर निर्माण , यहाँ एक स्पष्ट एल्गोरिथ्म है:
आज्ञा देना squares
एक सरणी खिलाड़ी स्थानों द्वारा अनुक्रमित है, और युक्त, प्रत्येक संभव स्थान के लिए, या तो किसी अन्य स्थान या विशेष मूल्य के सूचकांक हो NULL
। (आप इसे एक विरल सरणी के रूप में संग्रहीत करना चाह सकते हैं।) इस सरणी में प्रविष्टियों के संभावित मूल्यों की व्याख्या इस प्रकार की जा सकती है:
- यदि
squares[S]
है NULL
, तो वर्ग S
में जाने के लिए स्वतंत्र है।
- यदि
squares[S] == S
, या तो खिलाड़ी S
नहीं जा सकता है या नहीं ले जाएगा, या दो (या अधिक) खिलाड़ियों ने S
एक ही समय में स्थानांतरित करने की कोशिश की और दोनों को अस्वीकार कर दिया गया।
- अन्यथा,
squares[S]
उस वर्ग का सूचकांक होगा जिसमें से एक खिलाड़ी वर्ग में जाना चाहता है S
।
प्रत्येक मोड़ पर, निम्न एल्गोरिथम की सभी प्रविष्टियों को आरंभीकृत squares
करें NULL
और फिर चलाएं:
for each player:
current := the player's current location;
target := the location the player wants to move to (may equal current);
if squares[target] is NULL:
squares[target] := current; // target is free, mark planned move
else
// mark the target square as contested, and if necessary, follow
// the pointers to cancel any moves affected by this:
while not (target is NULL or squares[target] == target):
temp := squares[target];
squares[target] := target;
target := temp;
end while
// mark this player as stationary, and also cancel any moves that
// would require some else to move to this square
while not (current is NULL or squares[current] == current):
temp := squares[current];
squares[current] := current;
current := temp;
end while
end if
end for
उसके बाद, फिर से खिलाड़ियों की सूची के माध्यम से लूप करें, और उन लोगों को स्थानांतरित करें जो ऐसा करने में सक्षम हैं:
for each player:
current := the player's current location;
if not squares[current] == current:
move player;
end if
end for
चूंकि प्रत्येक चाल को केवल एक बार नियोजित किया जा सकता है और एक बार में रद्द कर दिया जाता है, इसलिए यह एल्गोरिथ्म सबसे खराब स्थिति में भी n खिलाड़ियों के लिए O ( n ) समय में चलेगा ।
(काश, यह एल्गोरिथ्म खिलाड़ियों को स्थान बदलने या तिरछे रास्तों को तिरछे करने से नहीं रोकता। यह गजेट के दो-चरण चाल को अनुकूलित करने के लिए संभव हो सकता है , लेकिन ऐसा करने के लिए पूरी तरह से अनुभवहीन तरीका काम नहीं करेगा और मैं बहुत थक गया हूँ अभी एक बेहतर तरीका निकालने के लिए।)