দৃ Conn়ভাবে সংযুক্ত উপাদান


16

নির্দেশিত গ্রাফের দুটি স্বতন্ত্র শিখরগুলি দৃ connected়ভাবে সংযুক্ত থাকে যদি প্রতিটি থেকে অন্যের গ্রাফে পথ থাকে। গ্রাফের একটি দৃ connected়ভাবে সংযুক্ত উপাদান হ'ল গ্রাফের একটি উপসেট যেমন সাবসেটের প্রতিটি জোড়া পৃথক শীর্ষে সুদৃ connected়ভাবে সংযুক্ত থাকে এবং সাবসেটটিতে আরও কোনও শীর্ষবিন্দু যুক্ত করা এই সম্পত্তিটিকে ভেঙে দেয়।

আপনার চ্যালেঞ্জটি হল কোনও গ্রাফকে দৃ strongly়ভাবে সংযুক্ত উপাদানগুলিতে আলাদা করা। বিশেষত, আপনাকে অবশ্যই গ্রাফের সমস্ত এসসিসি আউটপুট করতে হবে।

ইনপুট / আউটপুট:

ইনপুট হিসাবে, আপনি নির্দেশিত প্রান্তগুলির তালিকা, সংলগ্ন তালিকা, সংলগ্ন ম্যাট্রিক্স বা অন্য কোনও যুক্তিসঙ্গত ইনপুট ফর্ম্যাট ব্যবহার করতে পারেন। আপনি নিশ্চিত না হন জিজ্ঞাসা করুন। আপনি ধরে নিতে পারেন যে গ্রাফের কোনও সম্পূর্ণ সংযোগ বিহীন শীর্ষকোষ নেই, এবং কোনও স্ব-প্রান্ত নেই, তবে আপনি আরও কোনও অনুমান করতে পারবেন না। আপনি বৈকল্পিকভাবে ইনপুট হিসাবে উল্লম্বের তালিকা, পাশাপাশি উল্লম্বের সংখ্যাও নিতে পারেন।

আউটপুট হিসাবে, আপনাকে অবশ্যই শিখুনগুলির একটি পার্টিশন দিতে হবে, যেমন শীর্ষ অনুসারে তালিকার তালিকার একটি তালিকা, যেখানে প্রতিটি উপলিস্টটি দৃ strongly়ভাবে সংযুক্ত উপাদান, বা শীর্ষে একটি লেবেলিং যেখানে প্রতিটি লেবেল একটি পৃথক উপাদানগুলির সাথে সামঞ্জস্য করে।

আপনি যদি কোনও লেবেলিং ব্যবহার করেন তবে লেবেলগুলি অবশ্যই শীর্ষে বা একক ক্রমাগত হতে হবে। এটি হ'ল লেবেলে গণনা বন্ধ করে দেওয়া।

উদাহরণ:

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

ইনপুটটি প্রথম লাইনে রয়েছে, আউটপুটটি দ্বিতীয় লাইনে রয়েছে।

[[1, 2], [2, 3], [3, 1], [1, 4]]
[[1, 2, 3], [4]]

[[1, 2], [2, 3], [3, 4]]
[[1], [2], [3], [4]]

[[1, 2], [2, 1], [1, 3], [2, 4], [4, 2], [4, 3]]
[[1, 2, 4], [3]]

[[1, 2], [2, 3], [2, 5], [2, 6], [3, 4], [3, 7], [4, 3], [4, 8], [5, 1], [5, 6], [6, 7], [7, 6], [8, 7], [8, 4]]
[[1, 2, 5], [3, 4, 8], [6, 7]]

স্কোরিং এবং বিধিনিষেধ:

স্ট্যান্ডার্ড লুফোলগুলি বরাবরের মতো নিষিদ্ধ। এছাড়াও, বিল্ট-ইনগুলি যা বিশেষত দৃ strongly়ভাবে সংযুক্ত উপাদানগুলির সাথে কাজ করে তা নিষিদ্ধ are

প্রদত্ত উদাহরণগুলিতে সমাধানগুলি এক ঘণ্টার বেশি চলবে না। (এটি ধীর সূচকীয় সমাধানগুলি প্রতিরোধ করার উদ্দেশ্যে এবং অন্য কিছুই নয় else)

এটি কোড গল্ফ। সবচেয়ে কম বাইট জেতা


আমরা সংযুক্ত উপাদানকে যে লেবেলগুলি অর্পণ করি তা কত নমনীয়? উদাহরণস্বরূপ, সেই উপাদানটিতে ভার্টেক্স সূচকগুলির তালিকাটি কোনও বৈধ লেবেল হবে?
xnor

@ xnor সম্পূর্ণ নমনীয়। সমতা পরীক্ষা / অভিন্ন স্ট্রিংয়ের মাধ্যমে মিলিয়ে নেওয়া উচিত।
isaacg

আমাদের গ্রাফ ইনপুট ফর্ম্যাটেও শিখুনের সংখ্যা এবং / অথবা ভার্টেক্স লেবেলের একটি তালিকা থাকতে পারে?
xnor

@ এক্সনর দু'জনের জন্য হ্যাঁ আমি এটি সম্পাদনা করব
isaacg 26'16

সর্বশেষ পরীক্ষার ক্ষেত্রে, আমি এটি পেয়ে যাচ্ছি যে 8এটি কোনও উপাদান [3,4]নয় কারণ এটি কেবলমাত্র প্রতিটি 6এবং 7(এটির উভয়ই এটিতে পৌঁছতে পারে না) পারে না।
xnor

উত্তর:


7

পাইথন 2 নাম্পি ব্যবহার করে, 71 62 বাইট

import numpy
def g(M,n):R=(M+M**0)**n>0;print(R&R.T).argmax(0)

numpyসংলগ্নতা এবং নোডের সংখ্যা উপস্থাপন করে এমন একটি ম্যাট্রিক্স হিসাবে ইনপুট নেয় । numpyসারি ম্যাট্রিক্স হিসাবে আউটপুট উত্পাদন করে যা প্রতিটি উপাদানকে তার উপাদানটির সর্বনিম্ন শীর্ষটি সংখ্যা দ্বারা লেবেল করে।

একটি সংলগ্ন ম্যাট্রিক্সের জন্য M, ম্যাট্রিক্স শক্তি প্রতিটি সূচনা প্রান্ত থেকে প্রতিটি প্রান্তের শীর্ষ প্রান্তে-স্টেপ পাথগুলির M**nসংখ্যা গণনা করে nMমাধ্যমে পরিচয় যুক্ত করা হচ্ছেM+M**0 যে প্রান্ত থেকে একটি স্ব-লুপ যোগ করার জন্য মডিফাই অন্তিক ম্যাট্রিক্স। সুতরাং, (M+M**0)**nসর্বাধিক দৈর্ঘ্যের পাথ গণনা করা হয় n(অতিরিক্তভাবে) with

যেহেতু যে কোনও পাথের দৈর্ঘ্য সর্বাধিক n, নোডের সংখ্যা, যে কোনও স্থান থেকে (i,j)ভার্টেক্স jপৌঁছানো যায় সেখানে iইতিবাচক প্রবেশের সাথে মিলে যায় (M+M**0)**n। রিচ্যাবিলিটি ম্যাট্রিক্স তখনR=(M+M**0)**n>0 , যেখানে >0প্রবেশের দিক দিয়ে কাজ করে।

ট্রান্সপোজ কোথায়, এন্ট্রিওয়্যার andহিসাবে গণনা করা হচ্ছে, তারপরে পারস্পরিকরূপে পৌঁছনোযোগ্য শীর্ষ কোণগুলির জোড় যুক্ত একটি ম্যাট্রিক্স দেয়। এটির তম সারিতে এটির মতো একই দৃ strongly়ভাবে সংযুক্ত উপাদানটির সূচিগুলির জন্য একটি সূচক ভেক্টর। প্রতিটি সারির এটি গ্রহণ করা এতে প্রথমটির সূচক দেয় যা এটির উপাদানগুলির মধ্যে ক্ষুদ্রতম শীর্ষের সূচক।R&R.TR.TiargmaxTrue


4

জাভাস্ক্রিপ্ট (ES6), 125 বাইট

a=>a.map(([m,n])=>(e[m]|=1<<n|e[n],e.map((o,i)=>o&1<<m?e[i]|=e[m]:0)),e=[])&&e.map((m,i)=>e.findIndex((n,j)=>n&1<<i&&m&1<<j))

আর্গুমেন্ট হিসাবে নির্দেশিত জোড়গুলির একটি তালিকা নেয়, ফলস্বরূপ ফলাফলটি প্রতিটি ভার্টেক্সের জন্য একটি অ্যারের হয় যার সাথে প্রথম প্রান্তটি দৃ strongly়ভাবে যুক্ত থাকে, যা আমি বিশ্বাস করি একটি বৈধ লেবেল হিসাবে গণ্য nts উদাহরণস্বরূপ, ইনপুটটি দিয়ে [[1, 2], [2, 3], [2, 5], [2, 6], [3, 4], [3, 7], [4, 3], [4, 8], [5, 1], [5, 6], [6, 7], [7, 6], [8, 7], [8, 4]]এটি ফিরে আসে [, 1, 1, 3, 3, 1, 6, 6, 3](ভার্টেক্স 0 নেই; 1, 2 এবং 5 এর লেবেল 1; 3, 4 এবং 8 এর লেবেল 3 রয়েছে যখন 6 এবং 7 এর লেবেল 6 রয়েছে)।


4

এমএটিএল , 26 22 বাইট

tnX^Xy+HMY^gt!*Xu!"@f!

এটি @ xnor এর উত্তরের মতো একই পদ্ধতির ব্যবহার করে ।

কাজ করে বর্তমান সংস্করণ (15.0.0) ভাষার।

ইনপুট হ'ল গ্রাফের সংলগ্ন ম্যাট্রিক্স, সেমিকোলন দ্বারা পৃথক করা সারিগুলি। প্রথম এবং শেষ পরীক্ষার মামলাগুলি

[0 1 0 1; 0 0 1 0; 1 0 0 0; 0 0 0 0]

[0 1 0 0 0 0 0 0; 0 0 1 0 1 1 0 0; 0 0 0 1 0 0 1 0; 0 0 1 0 0 0 0 1; 1 0 0 0 0 1 0 0; 0 0 0 0 0 0 1 0; 0 0 0 0 0 1 0 0; 0 0 0 1 0 0 1 0]

এটি অনলাইন চেষ্টা করুন!

t     % implicitly input adjacency matrix. Duplicate
n     % number of elements
X^    % square root
Xy    % identity matrix of that size
+     % add to adjacency matrix
HM    % push size again
Y^    % matrix power
g     % convert to logical values (0 and 1)
t!*   % multiply element-wise by transpose matrix
Xu    % unique rows. Each row is a connected component
!     % transpose
"     % for each column
  @   %   push that column
  f!  %   indices of nonzero elements, as a row
      % end for each. Implicitly display stack contents

3

পাইথ, 13 বাইট

.gu+Gs@LQG.{k

বিক্ষোভ , পরীক্ষা স্যুট

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

প্রোগ্রামটির সংক্ষিপ্তসারটি হ'ল আমরা প্রতিটি শীর্ষবিন্দু থেকে যেগুলি শীর্ষে পৌঁছতে পারে তার সেটগুলি খুঁজে পাই এবং তারপরে সেই সেটগুলি দ্বারা উল্লম্বগুলি গোষ্ঠীভূত করি। একই এসসিসিতে যে কোনও দুটি ভার্টিকোস একই রকমের শিখরগুলির কাছ থেকে তাদের কাছে পৌঁছানো যায়, কারণ প্রত্যেকে অপরটির থেকে পৌঁছনীয় এবং পুনঃচঞ্চলতা অস্থায়ী। বিভিন্ন উপাদানগুলির যে কোনও লম্বালম্বিগুলির কাছে পৃথকভাবে পৌঁছনযোগ্য সেট থাকে, কারণ কোনওটির সেটেই অন্যটি থাকে না।

কোড ব্যাখ্যা:

.gu+Gs@LQG.{k
                  Implicit: Q is the input adjacency list.
.g           Q    Group the vertices of Q by (Q is implicit at EOF)
  u       .{k     The fixed point of the following function, 
                  starting at the set containing just that vertex
   +G             Add to the set
     s            The concatenation of
      @LQG        Map each prior vertex to its directed neighbors
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.