কম্পিউটার টিউটোরিয়াল

পাইথনে শর্টকাট ব্যবহার করে দুটি শহরের মধ্যবর্তী দূরত্ব বের করার প্রোগ্রাম


মনে করুন n সংখ্যক শহর আছে এবং শহরগুলো দু ধরনের রাস্তা দিয়ে সংযুক্ত: হাইওয়ে এবং শর্টকাট। এখন একটি মানচিত্র আছে যেখানে শুধু হাইওয়ে দেখানো হয়েছে এবং সব শর্টকাট অনুপস্থিত। পরিবহন বিভাগ শর্টকাট ও হাইওয়ে ব্যবহার করে শহরগুলো সংযুক্ত করার চেষ্টা করছে। দুটি শহরের মধ্যে শর্টকাট থাকে তখন, যখন তাদের মধ্যে হাইওয়ে থাকে না। আমাদের কাজ হলো একটি শুরুর শহর থেকে বাকি সব শহরে শর্টকাটের মাধ্যমে ন্যূনতম দূরত্ব বের করা।

যেমন, ইনপুট এমন হলে

পাইথনে শর্টকাট ব্যবহার করে দুটি শহরের মধ্যবর্তী দূরত্ব বের করার প্রোগ্রাম

এবং শুরু শহর (s) = 1 হলে, আউটপুট হবে 3 1 2।

শুধু শর্টকাট ব্যবহার করলে, শহর ১ এবং ২-এর মধ্যে পথ হবে 1→3→4→2, এবং খরচ হবে ৩।

একইভাবে,

১ এবং ৩: 1→3, খরচ ১।

১ এবং ৪: 1→3→4, খরচ ২।

সমাধান পদ্ধতি

এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:

  • graph := n সংখ্যক সেট ধারণকারী একটি লিস্ট
  • edges-এ থাকা প্রতিটি (x, y) জোড়ার জন্য
    • x := x - 1
    • y := y - 1
    • y কে graph[x]-এ ইনসার্ট করুন
    • x কে graph[y]-এ ইনসার্ট করুন
  • temp_arr := -1 মান দিয়ে n সাইজের একটি অ্যারে
  • b_set := s - 1 কী ধারণকারী একটি ম্যাপ
  • f := 0 থেকে n পর্যন্ত সংখ্যাগুলোর সেট এবং b_set-এর সেট ডিফারেন্স
  • index := 0
  • যখন b_set-এর সাইজ > 0, तब
    • b_set-এ থাকা প্রতিটি a এলিমেন্টের জন্য
      • temp_arr[a] := index
    • nxt := graph-এর ভ্যালুগুলোর একটি ম্যাপ যা b_set-এর সাবসেট নয়
    • f := f এবং nxt-এর সেট ডিফারেন্স
    • b_set := nxt
    • index := index + 1
  • temp_arr-এর নন-জিরো ভ্যালুগুলো রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বোঝার জন্য:

def solve(n, edges, s):     graph = [set() for i in range(n)]     for (x, y) in edges:         x -= 1         y -= 1         graph[x].add(y)         graph[y].add(x)     temp_arr = [-1] * n     b_set = {s - 1}     f = set(range(n)).difference(b_set)     index = 0     while len(b_set) > 0:         for a in b_set:             temp_arr[a] = index         nxt = {f for f in f if not b_set.issubset(graph[f])}         f = f.difference(nxt)         b_set = nxt         index += 1     return (' '.join(str(t) for t in temp_arr if t > 0))     print(solve(4, [(1, 2), (2, 3), (1, 4)], 1)) 

ইনপুট

4, [(1, 2), (2, 3), (1, 4)], 1

আউটপুট

3 1 2

  1. পাইথনে নাগরিকদের মার্কেট এক্সেসের জন্য মিনিমাম খরচ বের করা

  2. পাইথনে বাইনারি ট্রিতে দুটি নোডের মধ্যকার দূরত্ব খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে গ্রাফ সবাই দ্বারা ট্রাভার্সেবল কিনা চেক করার প্রোগ্রাম

  4. পাইথনে কোনো সংখ্যা ২-এর ঘাত কিনা চেক করা