قوائم التجاور من الإدخال
إنشاء الرسم البياني الذي تمنحكم إياه المسابقات
قوائم التجاور من الإدخال درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
ما الرسم البياني حقًا
الرسم البياني هو ببساطة نقاط تُسمى عقدًا، تصل بينها خطوط تُسمى حواف. والمدن المرتبطة بالطرق مثال على رسم بياني تعرفه بالفعل. 🗺️
العقد والحواف
كل عقدة تمثّل شيئًا، وكل حافة تعني أن عقدتين متصلتان. عادةً ما ترقّم رسوم المسابقات العقد من 1 إلى n.
قائمة التجاور
التخزين الشائع في المسابقات هو قائمة التجاور: احتفظ لكل عقدة بقائمة جيرانها المباشرين.
adj = [[] for _ in range(n + 1)]لماذا لا نستخدم مصفوفة
تستخدم المصفوفة ذاكرة مقدارها n تربيع، وهذا يصبح هائلًا عندما تكون n كبيرة. أما قائمة التجاور فلا تخزن إلا الحواف الموجودة، ولذلك تتوسع بكفاءة.
قراءة السطر الأول
تبدأ معظم المدخلات برقمين: n للعقد وm للحواف. اقرأهما أولًا لتعرف عدد الحواف المتوقع.
n, m = map(int, input().split())حافة واحدة في كل سطر
يحتوي كل سطر من الأسطر m التالية على زوج u v. وتعني هذه الحافة الواحدة أن u وv متصلتان مباشرة.
u, v = map(int, input().split())غير الموجّه يعني الاتجاهين
بالنسبة إلى حافة غير موجّهة، أضف الرابط في الاتجاهين. يمكنك الانتقال من u إلى v ومن v إلى u.
adj[u].append(v)
adj[v].append(u)الموجّه يعني اتجاهًا واحدًا
بالنسبة إلى حافة موجّهة، خزّن الاتجاه من u إلى v فقط. اقرأ نص المسألة بعناية لتعرف نوع الحافة الموجودة لديك.
adj[u].append(v)بناؤها داخل حلقة
كرّر الحلقة m مرة، واقرأ كل زوج، واملأ القوائم. بعد انتهاء الحلقة، ستحتوي قائمة التجاور على الرسم البياني كاملًا.
for _ in range(m):
u, v = map(int, input().split())
adj[u].append(v)
adj[v].append(u)الفهرسة من 1 مقابل الفهرسة من 0
إذا بدأت العقد من 1، فاجعل حجم قائمتك n زائد 1 حتى يكون الفهرس n صالحًا. يؤدي الخلط بين الفهرسة إلى أخطاء صامتة.
زيارة جيران عقدة
بعد بنائها، يصبح الاستكشاف سهلًا: مرّر على adj الخاصة بعقدة للوصول إلى كل جار بخطوة واحدة.
for nb in adj[u]:
print(nb)تحقق سريع
لقد قرأت حافة غير موجّهة u v. ماذا تخزّن؟
مراجعة
يمكنك الآن بناء رسم بياني على هيئة قائمة تجاور: اقرأ n وm، وكرّر على الحواف، وأضف الاتجاهين عندما تكون الحافة غير موجّهة. 🎉
الأسئلة الشائعة
هل درس «قوائم التجاور من الإدخال» مجاني؟
نعم — نص درس «قوائم التجاور من الإدخال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
ماذا ستتعلم في «قوائم التجاور من الإدخال»؟
إنشاء الرسم البياني الذي تمنحكم إياه المسابقات تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟
لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «قوائم التجاور من الإدخال»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟
نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- قوائم التجاور من الإدخال
- BFS لأقصر المسارات غير الموزونة
- DFS والاستدعاء الذاتي والمكدسات التكرارية
- المكوّنات المتصلة والملء الانتشاري