ষড়ভুজ গ্রিডে পরিসীমা দেখানো হচ্ছে


10

এখানেই অবস্থা।

আমার কাছে ষড়ভুজ বোর্ড এবং এর উপর একটি ইউনিট, গতি বা সরানো মান সহ 4. ডিফ্রেন্ট ভূখণ্ডের আলাদা মূল্য আছে i আমি যখন ইউনিটে ক্লিক করি, গেমটি আমাকে একটি সরানোর পরিসর দেখায়।

আমার সমাধানটি ছিল হ'ল এ * প্যাথফাইন্ডিংয়ের সাথে প্রতিটি হেক্স্স 4 এর পরিসীমাতে পরীক্ষা করা এবং যদি পাথের ব্যয় 4 এর চেয়ে কম হয় তবে এই হেক্সটি সীমার মধ্যে ছিল ally ফিনালি গেমটি আমাকে সুন্দরভাবে সেই ইউনিটের পরিসর দেখায়।

আমার প্রশ্ন হ'ল: হেক্স গ্রিড বা স্কোয়ার গ্রিডের সীমার সন্ধানের কি অন্য কোনও সমাধান আছে, কারণ আমি আমার সমাধানটিতে যা করেছি তা নিয়ে আমি সত্যিই গর্বিত হলেও, আমি মনে করি, এটি অতিরঞ্জিত হওয়ার মতো কিছু? :))

আমাকে এই প্রশ্নটি জিজ্ঞাসা করতে কী করে? আমি লক্ষ্য করেছি যে ইউনিটের গতি যখন 4 বা 6 বা 8 হয় তখনও আমার কম্পিউটারের জন্য কম্পিউটারের পরিসীমা সময়টা বেশ ভাল ছিল তবে যখন গতি 10 এবং তার বেশি ছিল তখন আমি লক্ষ্য করেছি যে গণনা করার জন্য আমাকে কয়েক সেকেন্ড অপেক্ষা করতে হবে .আমি আসল গেমসগুলিতে আমি বরং এর মতো কিছু দেখতে পাচ্ছি না এবং আমার এ * প্যাথফাইন্ডিং বরং ভালভাবে অনুকূলিত হয়েছে, তাই আমি ভাবছি যে আমার সমাধানটি ভুল।

কোন জবাবের জন্য ধন্যবাদ।


1
আমি বাইট 56 এর সাথে একমত যে প্রস্থের প্রথম অনুসন্ধানের অ্যালগরিদম একটি ভাল সমাধান। এটি এমনটি বলার অপেক্ষা রাখে না যে আপনার সৃজনশীল হওয়ার চেষ্টা করা উচিত নয়, তবে যতটা সুপরিচিত আলগোরিদিমগুলি যেতে পারে এটি একটি ভাল যা কার্যকরভাবে প্রযোজ্য।
দ্য জলিসিন

উত্তর:


11

আপনি ঠিক বলেছেন যে এ * একটু ওভারকিল, তবে খুব বেশি নয়। আপনার মতো বিলম্ব দেখানো উচিত নয়। এ * আসলেই কেবলমাত্র একটি সংশোধিত ডিজিকস্ট্রার অ্যালগরিদম । যেহেতু আপনি একটি শেষ অবস্থান ব্যবহার করছেন না (যেমন আপনার শেষ অবস্থানটি "আপনি যতদূর যেতে পারেন"), এটি যুক্ত করার সাথে এ * ব্যবহার করা প্রয়োজনীয় নয় ur কেবলমাত্র ডিজিক্সট্রা বা একটি সাধারণ প্রস্থের প্রথম সন্ধানটি যথেষ্ট হবে।

উদাহরণস্বরূপ, ডিকিক্স্রা সমস্ত দিক থেকে সমানভাবে ছড়িয়ে পড়বে:

এখানে চিত্র বর্ণনা লিখুন

(একটি সাধারণ প্রস্থের প্রথম সন্ধানটি এর সাথে মিলবে)

প্রতিটি নোডে ভ্রমণের জন্য ব্যয়ের উপর নজর রাখুন। কোনও নোড একবার সর্বাধিক ভ্রমণ ব্যয় শেষে, এর সংযুক্ত নোডগুলি আর কোনও প্রক্রিয়া করবেন না। (নীচের দেয়ালটিতে নোডগুলি যেখানে চালিত হয় তার অনুরূপ)।

যদি আপনি কেবল 10 টি নোডের বাইরে পারফরম্যান্স সমস্যাগুলি নিয়ে চলেছেন তবে আপনি কীভাবে নোডগুলিতে অ্যাক্সেস করছেন তা দেখতে চাইবেন। প্রথম প্রস্থের অনুসন্ধানে লক্ষণীয় দেরি না করে শত শত নোড নেভিগেট করতে সক্ষম হওয়া উচিত (অবশ্যই কয়েক সেকেন্ড নয়)। দ্রুত ট্র্যাভারসাল জন্য গ্রাফ ফর্ম্যাটে আপনার বিশ্বের একটি সাধারণ সংস্করণ সংরক্ষণ করার কথা বিবেচনা করুন।


আপনি বিএফএস ব্যবহার করে এবং অ্যাকাউন্টে বাধা / বিভিন্ন ওজন গ্রহণ করে দুটি নোডের মধ্যে দূরত্ব খুঁজে পেতে পারেন?
লুক বি।

নোডগুলির মধ্যে চলাচলের ব্যয় বেশিরভাগ অংশের জন্য প্রাক-গণনা করা উচিত। বিএফএস ব্যবহার করে ব্যয়টি গণনা করা হয় না, নোডগুলি অনুসরণ করার জন্য বিএফএস একটি অ্যালগরিদম। এক নোড থেকে অন্য নোডে ভ্রমণের জন্য আপনি কীভাবে ব্যয় নির্ধারণ করবেন তা আপনি নোডগুলি কীভাবে অতিক্রম করবেন তার থেকে আলাদা।
মাইকেলহাউস

ধন্যবাদ, এখন আমি দেখছি কেন আমার চিন্তাভাবনাটি ভুল ছিল, তার মূল বক্তব্যটি ছিল "যেহেতু আপনি শেষ অবস্থানটি ব্যবহার করছেন না (যেমন আপনার শেষ অবস্থানটি" ​​আপনি যতদূর যেতে পারেন ")"। আমার সমাধানে আমি শেষের অবস্থান ছিল, এটি ইউনিট ছিল I আমি কেবল ভুল দিক থেকে সমস্যার সমাধান করেছি irst প্রথম আমি সীমানা নির্ধারণ করেছিলাম, এবং সেখান থেকে আমি আবার আমার ইউনিটে ফিরে গিয়েছিলাম, সেই পথে আমি সম্ভবত একই নোডের মধ্য দিয়ে বহুবার গিয়েছিলাম o তাই যখন আমার গতি বৃদ্ধি পাবে, গণনার সংখ্যাও অনেক বেড়ে যায় you আপনি আমাকে যেভাবে দেখান, আমি সর্বদা নোড একবার দেখতে যাব I আমার ঠিক দৃষ্টিকোণটির দৃষ্টিভঙ্গি ছিল, সত্যিই ধন্যবাদ, এটি অনেক সহজ করে দেয়।
ব্যবহারকারী 23673

4

অমিত প্যাটেল তাঁর সাইটে রেঞ্জ পাওয়ার জন্য দুর্দান্ত উত্স সরবরাহ করেছেন । নিবন্ধে, তিনি একটি ব্যাপ্তির মধ্যে হেক্স টাইল সংগ্রহ করার জন্য নিম্নলিখিত অ্যালগরিদম ব্যবহার করেছেন:

for each -N  Δx  N:
    for each max(-N, x-N)  Δy  min(N, x+N):
        Δz = xy
        results.append(H.add(Cubex, Δy, Δz)))

এটি হেক্স গ্রিডের সাথে প্রান্তিককরণ তৈরি করে:

এখানে চিত্র বর্ণনা লিখুন

এটি কেন্দ্রের হেক্সের একটি নির্দিষ্ট দূরত্বে সমস্ত হেক্সসকে খুঁজে পাবেন, আপনি যদি বাধা বিবেচনা করতে চান তবে আমার অন্য উত্তর থেকে প্রস্থের প্রথম অনুসন্ধানটি ব্যবহার করুন।


1

কারও যদি এটির প্রয়োজন হয়, প্যাটেলের অ্যালগোরিদম সি # বাস্তবায়ন:

IEnumerable<Hex> GetRange(Hex center, int range)
    {
        var inRange = new List<Hex>();
        for (int q = -range; q <= range; q++)
        {
            int r1 = Math.Max(-range, -q - range);
            int r2 = Math.Min(range, -q + range);
            for (int r = r1; r <= r2; r++)
            {
                inRange.Add(center.Add(new Hex(q, r, -q - r)));
            }
        }

        return inRange;
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.