عدّ المسارات على شبكة
جمع المسارات من زاوية إلى أخرى
عدّ المسارات على شبكة درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
مسألة الشبكة الكلاسيكية
تبدأ من الزاوية العلوية اليسرى لشبكة وتريد الوصول إلى الزاوية السفلية اليمنى. تتحرك في كل خطوة إلى اليمين أو إلى الأسفل. كم عدد المسارات المختلفة الموجودة؟
لماذا تناسبها DP
يمكن الوصول إلى كل خلية من الخلية التي فوقها أو الخلية الموجودة إلى يسارها. هذا التداخل هو بالضبط سبب كون هذه المسألة مسألة DP.
حدّد الحالة
لتكن dp[i][j] عدد الطرق للوصول إلى الخلية (i, j) من نقطة البداية. تسمية الحالة بوضوح تمثّل نصف الحل.
الانتقال
لا تصل إلى الخلية إلا من الأعلى أو من اليسار، لذلك يكون العدد هو مجموعهما. هذا هو الانتقال الذي يحرّك الجدول بأكمله.
dp[i][j] = dp[i-1][j] + dp[i][j-1]الحالة الأساسية
للخلية الابتدائية طريقة واحدة فقط للوصول إليها: ألا تفعل شيئًا. لذلك تكون قيمة dp[0][0] مساوية لـ 1 قبل ملء أي شيء آخر.
dp[0][0] = 1للحواف مسار واحد
للخلايا الموجودة في الصف العلوي أو العمود الأيسر مسار مستقيم واحد. يكون العدد فيها دائمًا 1، لأن أحد الجارين يقع خارج الشبكة.
أنشئ الجدول
أنشئ جدولًا بحجم m by n واملأه بالأصفار. يضمن تحديد حجمه مسبقًا بقاء الفهارس واضحة وتجنّب المفاجآت.
dp = [[0] * n for _ in range(m)]املأه بترتيب القراءة
كرّر على الصفوف ثم الأعمدة، من الأعلى إلى الأسفل ومن اليسار إلى اليمين. يضمن هذا الترتيب جاهزية كلا الجارين قبل استخدامهما.
for i in range(m):
for j in range(n):
...خلية الإجابة
بعد إكمال الملء، يوجد عدد المسارات في الخلية الأخيرة. تكون الإجابة هي dp[m-1][n-1]، أي الزاوية السفلية اليمنى.
answer = dp[m-1][n-1]وفّر الذاكرة باستخدام صف واحد
يحتاج كل صف إلى الصف الذي يسبقه فقط، لذا يمكنك الاحتفاظ بـصف واحد وتحديثه في مكانه. وبذلك تنخفض الذاكرة إلى O(n).
row[j] += row[j-1]الاختصار الرياضي
عند عدم وجود عوائق، تكون الإجابة معاملًا ثنائيًا: اختر الخطوات التي ستتجه إلى الأسفل من إجمالي الخطوات. تظل DP الخيار الأفضل عند ظهور العوائق.
تحقّق سريع
أنت تملأ dp[i][j] لخلية داخلية مفتوحة. ما الصيغة الصحيحة؟
مراجعة: عدّ المسارات
عرّف dp على أنه عدد المسارات إلى خلية، واضبط dp[0][0] على 1، ثم أضف قيمة الخلية التي فوقها إلى قيمة الخلية التي على يسارها. تحتوي الزاوية على الإجابة. 🧭
الأسئلة الشائعة
هل درس «عدّ المسارات على شبكة» مجاني؟
نعم — نص درس «عدّ المسارات على شبكة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عدّ المسارات على شبكة
- أقل مجموع لمسار مع العوائق
- أطول تتابع مشترك
- مسافة التحرير خطوةً بخطوة