গ্রাফের সবচেয়ে সংক্ষিপ্ত পথ


12

কোনও গ্রাফ নিতে (কোনও স্ট্যান্ডার্ড ইনপুট বা একটি ফাইল, আপনার পছন্দ থেকে) নিতে একটি প্রোগ্রাম লিখুন এবং গ্রাফের মধ্যে একটি সংক্ষিপ্ততম পথটি সন্ধান করুন।

গ্রাফগুলি নিম্নলিখিত ফর্ম্যাটটি ব্যবহার করে নির্দিষ্ট করা হয়েছে:

A---S   F--T
|  / \  |
| /   5 0
|/     \|
D----3--E

    A-Z: nodes in the graph
   -|/\: edges in the graph
    0-9: weights on the edges
<space>: all the holes

সমস্ত প্রান্তগুলি পুনঃনির্দেশিত এবং 8 টি মূল দিকনির্দেশের (যেমন, কোনও বাঁকানো নয়) একটির সাথে থাকা। প্রান্তগুলি optionচ্ছিকভাবে 0 থেকে 9 পর্যন্ত ওজন ধারণ করতে পারে The অবিচ্ছিন্ন প্রান্তগুলির ডিফল্ট ওজন 1 হয়।

আপনার কোড নোড মধ্যে সবচেয়ে কম পাথ গনা উচিত Sএবং Tএবং দৈর্ঘ্য এবং পাথ, ভালো মুদ্রণ:

5:SDEFT

সংক্ষিপ্ততম সঠিক প্রোগ্রামে জয়লাভ।


1
গ্রাফ চিত্রটি কি বিশ্লেষণ করতে হবে বা আপনি নিজের ফর্ম্যাটটি ব্যবহার করতে পারেন? বিন্যাসের একটি উদাহরণ - আপনার গ্রাফটি উপস্থাপিত হতে পারে: AS0,SD0,SE5,DE3,FE0,FT0(প্রতিটি প্রবেশ 3 বাইট দীর্ঘ হলে আপনি কমা বাদ দিতে পারেন
টমাস ও

1
হ্যাঁ, আমি উল্লেখ করেছি আপনাকে গ্রাফটি বিশ্লেষণ করতে হবে। আসলে এটিই বেশিরভাগ সমস্যা। সংক্ষিপ্ততম পাথ অংশটি আপনার পার্সিংটি সঠিক কিনা তা নিশ্চিত করে।
কিথ র্যান্ডাল

3
ইনপুট ফর্ম্যাটটি সত্যিই অনেক জটিল এবং imho সমস্যাটিতে আসলে তেমন যোগ করে না।
JPvdMerwe

1
ভেবেছিলেন এখানে ভাবেন লোকেরা কিছুটা চ্যালেঞ্জের কিছু চেষ্টা করতে চাইবে।
কিথ র্যান্ডাল

2
@ সিম্পলকোডার: আমি মনোস্পেস ধরে
নেব

উত্তর:


5

এখানে আমার কোড, অজগরের 494 টি অক্ষর:

import sys,re
m=sys.stdin.readlines()
Z=lambda c,s:re.findall(r'(\w)%s+(\d*)[^\w]*(\w)'%c,''.join(x*2for x in s))
T=lambda n:''.join(x for a in map(None,*n)for x in a if x)
E=Z('-',''.join(m))+Z('\\|',T(m))+Z('/',T(' '*m.index(s)+s for s in m))+Z('\\\\',T(' '*m[::-1].index(s)+s for s in m))
E+=[x[::-1]for x in E]
S={}
for x in E:S[x[0]]=1e9
S['S']=0
P={}
for i in E:
 for x,w,y in E:
  w=int('1'+w)%10
  if S[y]>S[x]+w:S[y]=S[x]+w;P[y]=x
i=p='T'
while i!='S':i=P[i];p=i+p
print'%d:'%S['T']+p
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.