سؤال 5: اكتب دالة بلغة البايثون تستخدم خوارزمية البحث بأولوية الاتساع (BFS) في مخطط للتحقق مما إذا كان هناك مسار بين عقدتين معطاتين.
الإجابة: س5: نُنشئ دالة تستقبل المخطط (قائمة تجاور)، وعقدة البداية وعقدة الهدف، ثم تطبّق BFS كالتالي: - نضع عقدة البداية في طابور (Queue). - ننشئ مجموعة visited لتتبع العقد التي تمت زيارتها. - طالما الطابور غير فارغ: - نُخرج عقدة من الطابور. - إذا كانت هي الهدف ⇐ نُرجع True (يوجد مسار). - وإلا نُدخل جميع جيرانها غير المزورين إلى الطابور ونضيفهم إلى visited. - إذا انتهى الطابور دون الوصول للهدف ⇐ نُرجع False (لا يوجد مسار).
خطوات الحل:
- **الشرح:** لنفهم هذا السؤال. المطلوب هو كتابة دالة في لغة بايثون تستخدم خوارزمية البحث بأولوية الاتساع (BFS) للتحقق من وجود مسار بين عقدتين في مخطط (Graph). الفكرة هنا هي أن خوارزمية BFS تبدأ من عقدة البداية وتستكشف جميع العقد المجاورة لها أولاً (أي المستوى نفسه) قبل الانتقال إلى العقد الأبعد. هذا يجعلها مناسبة للتحقق من وجود مسار في مخطط غير موزون. لتنفيذ ذلك، نتبع المنطق التالي: 1. نستخدم بنية بيانات الطابور (Queue) لأن BFS تعمل بمبدأ "أول ما يدخل أول ما يخرج" (FIFO). 2. نحتفظ بمجموعة (Set) لتتبع العقد التي تمت زيارتها حتى لا نزور نفس العقدة مرتين. 3. نبدأ بوضع عقدة البداية في الطابور وفي المجموعة. 4. ثم ندخل في حلقة: طالما الطابور غير فارغ، نُخرج عقدة منه ونتحقق: - إذا كانت هذه العقدة هي عقدة الهدف، فهذا يعني وجدنا مساراً، ونرجع True. - إذا لم تكن الهدف، نضيف جميع جيرانها (من قائمة التجاور) الذين لم تتم زيارتهم إلى الطابور والمجموعة. 5. إذا انتهت الحلقة ولم نجد الهدف، فهذا يعني لا يوجد مسار، ونرجع False. إذن الإجابة هي: كتابة دالة بهذا المنطق، حيث نمرر لها المخطط (ممثلاً بقائمة تجاور)، وعقدة البداية، وعقدة الهدف، ثم نطبق الخطوات المذكورة.