সাইমনডাব্লিউর উত্তরে বিল্ডিং , এখানে একটি স্পষ্ট আলগোরিদিম রয়েছে:
দিন 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
যেহেতু প্রতিটি পদক্ষেপ কেবল একবারেই পরিকল্পনা করা যেতে পারে এবং একবারে বাতিল করা যায়, তাই এই অ্যালগরিদম সবচেয়ে খারাপ ক্ষেত্রে এমনকি এন ( খেলোয়াড় ) এর জন্য ও ( এন ) সময়ে চলবে ।
(হায় আফসোস, এই অ্যালগরিদম খেলোয়াড়দের স্থান পরিবর্তন বা পথগুলি তির্যকভাবে অতিক্রম করা থেকে বিরত রাখে না G গজেটের দ্বি-পদক্ষেপের কৌশলটি এটির সাথে খাপ খাইয়ে নেওয়া সম্ভব হতে পারে , তবে এটি করার সম্পূর্ণ নির্দোষ উপায় কাজ করবে না এবং আমি খুব ক্লান্ত হয়ে পড়েছি) এখনই একটি আরও ভাল উপায় বের করতে।)