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