আমার পদ্ধতির সামান্য স্মৃতি নিবিড় (প্যাকম্যান যুগের দৃষ্টিকোণ থেকে) তবে আপনাকে কেবল একবার গণনা করা দরকার এবং এটি কোনও স্তরের ডিজাইনের জন্য (জাম্প সহ) কাজ করে।
লেবেল নোড একবার
আপনি যখন কোনও স্তর লোড করেন, তখন সমস্ত দানব লায়ার নোড 0 (লেয়ার থেকে দূরত্ব উপস্থাপন করে) লেবেল করুন। সমস্ত নোড লেবেল না করা পর্যন্ত বাহ্যিক লেবেলযুক্ত সংযুক্ত নোড 1, তাদের সাথে 2 টি সংযুক্ত নোড এবং অন্যদিকে এগিয়ে যান। (দ্রষ্টব্য: লায়ারের একাধিক প্রবেশ পথ থাকলেও এটি কাজ করে)
আমি ধরে নিচ্ছি যে আপনার কাছে ইতিমধ্যে প্রতিটি নোড এবং তাদের প্রতিবেশীদের সাথে সংযোগ উপস্থাপন করার জন্য সামগ্রী রয়েছে। সিউডো কোডটি এর মতো দেখতে পারে:
public void fillMap(List<Node> nodes) { // call passing lairNodes
int i = 0;
while(nodes.count > 0) {
// Label with distance from lair
nodes.labelAll(i++);
// Find connected unlabelled nodes
nodes = nodes
.flatMap(n -> n.neighbours)
.filter(!n.isDistanceAssigned());
}
}
চোখ সর্বনিম্ন দূরত্বের লেবেল সহ প্রতিবেশী স্থানান্তরিত
সমস্ত নোড একবার লেবেলযুক্ত হয়ে গেলে, চোখের রাউটিংটি তুচ্ছ হয় ... কেবল সর্বনিম্ন দূরত্বের লেবেল সহ প্রতিবেশী নোডটি বেছে নিন (দ্রষ্টব্য: যদি একাধিক নোডের সমান দূরত্ব থাকে তবে কোনটি বাছাই করা যায় তা বিবেচনা করে না)। সুডোকোড:
public Node moveEyes(final Node current) {
return current.neighbours.min((n1, n2) -> n1.distance - n2.distance);
}
সম্পূর্ণ লেবেলযুক্ত উদাহরণ