एड्जेसेंसी लिस्ट (Adjacency List) – ग्राफ़ प्रतिनिधित्व
ग्राफ़ को दर्शाने के सबसे लोकप्रिय तरीक़ों में से एक एड्जेसेंसी लिस्ट है। यह ग्राफ़ को लिस्ट्स के ऐरे (array) के रूप में दिखाने का तरीका है। ऐरे का प्रत्येक एलिमेंट ग्राफ़ के किसी वर्टेक्स (vertex) का प्रतिनिधित्व करता है, और उससे जुड़ी लिस्ट में वे वर्टिस होते हैं जो उस वर्टेक्स से सीधे जुड़े हुए हैं।
नीचे दिए गए चित्र में दिखाए गए निर्देशित ग्राफ़ (directed graph) से हम इसकी एड्जेसेंसी लिस्ट प्राप्त कर सकते हैं:
निर्देशित ग्राफ़ जिसमें 8 ऐज और 10 ऐज हैं। ध्यान दें कि वर्टेक्स 5 और 8 के बीच एक द्विदिश (bidirectional) कनेक्शन है।
जैसा कि आप देख सकते हैं, एड्जेसेंसी लिस्ट के ज़रिये यह ग्राफ़, एड्जेसेंसी मैट्रिक्स की तुलना में कहीं ज़्यादा कॉम्पैक्ट दिखता है। इसकी वजह यह है कि हमारे ग्राफ़ में ऐज की संख्या ज़्यादा नहीं है। हालाँकि, कुछ स्थितियों में जब ऐज की संख्या बहुत अधिक हो, तो ग्राफ़ को एड्जेसेंसी मैट्रिक्स में संग्रहीत करना ज़्यादा उपयोगी हो सकता है।
Challenge: Edges to Adjacency List
मान लीजिए कि हमारे पास एक अविमुखित (undirected) ग्राफ़ है, जिसमें v वर्टिस और e ऐज हैं। आपका काम है कि आप उसकी एड्जेसेंसी लिस्ट तैयार करें।
इनपुट
इनपुट की पहली पंक्ति में दो पूर्णांक v (1 ≤ v ≤ 100 000) और e (1 ≤ e ≤ 100 000) दिए जाते हैं।
अगली e पंक्तियों में प्रत्येक पर v1, v2 नाम के दो पूर्णांक (1 ≤ v1, v2 ≤ v) दिए जाते हैं, जिनका अर्थ है कि वर्टेक्स v1 और वर्टेक्स v2 एक-दूसरे से जुड़े हुए हैं (क्योंकि ग्राफ़ अविमुखित है)।
आउटपुट
प्रोग्राम को दिए गए ग्राफ़ की एड्जेसेंसी लिस्ट प्रिंट करनी चाहिए। हर पंक्ति की शुरुआत उस वर्टेक्स के आइडेंटिफ़ायर से होगी, जिसके बाद एक सेमीकोलन (:) आएगा, और फिर उसके कनेक्शन्स दिए जाएँगे। एक ही पंक्ति में कनेक्शन्स के बीच एक स्पेस होना चाहिए। वर्टेक्स और उनके कनेक्शन्स की क्रम-व्यवस्था मनमानी हो सकती है।