# وصف المشروع: Metro Route Finder
## نظرة عامة
**Metro Route Finder** هو تطبيق سطح مكتب مكتوب بلغة Python، يحاكي شبكة مترو ويجد **أقصر مسار** بين محطتين باستخدام خوارزمية **البحث بالعرض أولاً (BFS)**. المشروع مبني على محطات مستوحاة من شبكة المواصلات في الإسكندرية، ويضم واجهة رسومية تفاعلية (Tkinter) مع رسم بياني متحرك (NetworkX وMatplotlib).
## الأهداف
- تمثيل شبكة المترو على شكل رسم بياني (Graph)
- إيجاد أقصر مسار من حيث أقل عدد محطات
- عرض الشبكة والمسار بصريًا
- توفير واجهة تفاعلية سهلة للمستخدم
- معالجة المدخلات الخاطئة والحالات الحدّية
- عرض خطوات الاجتياز (Traversal) خطوة بخطوة
## لماذا BFS؟
لأنها تضمن إيجاد أقصر مسار في الرسوم غير الموزونة، وتستكشف العقد مستوى بمستوى، وهي مناسبة لأنظمة المترو حيث تكلفة الانتقال بين أي محطتين متجاورتين متساوية.
تعمل الخوارزمية كالتالي: تبدأ من محطة الانطلاق، ثم تزور المحطات المجاورة، وتتوسع مستوى بمستوى، وتتوقف عند الوصول إلى الوجهة، مع تتبّع المسار الكامل عبر تخزين المسار مع كل عقدة في الطابور. وتُخرج الخوارزمية أقصر مسار، وعدد المحطات، وترتيب زيارة المحطات.
## تصميم الشبكة
تُمثَّل الشبكة بقاموس (Dictionary) على شكل **قائمة مجاورة (Adjacency List)**، حيث كل محطة تمثل عقدة (Node)، وكل اتصال يمثل حافة (Edge)، والحركة بين المحطات ثنائية الاتجاه. وتضم الشبكة أكثر من 25 محطة، مع مسارات متفرعة وخطوط مترو متصلة ببعضها، مثل: El Nasr وSidi Bishr وLaurent وGleem وSporting وShatby وRaml وغيرها.
## الواجهة الرسومية (GUI)
مبنية باستخدام **Tkinter** مع **ttk Combobox** لاختيار المحطات، وتتضمن:
- قائمة منسدلة لمحطة البداية وأخرى للوجهة
- زر "Find Route"
- صندوق نتائج يعرض المسار الكامل وعدد المحطات وترتيب اجتياز BFS
**التحقق من المدخلات:** اكتشاف أسماء المحطات غير الصحيحة، ومنع التنفيذ إذا كانت البداية هي نفسها الوجهة، وعرض رسائل الخطأ عبر messagebox.
## تصوّر الرسم البياني (Visualization)
باستخدام **NetworkX** لبناء الرسم و**Matplotlib** للعرض والتحريك. تشمل المميزات:
- عرض الشبكة كاملة
- تلوين المحطات المزارة باللون الأصفر
- تلوين المحطة الحالية بالأحمر، وبالأخضر عند الوصول للوجهة
- تحريك عملية BFS خطوة بخطوة (كل إطار يمثل خطوة)
- إبراز أقصر مسار بحواف برتقالية
## سير عمل البرنامج
1. **إدخال المستخدم:** اختيار محطة البداية والوجهة
2. **التحقق:** هل المحطة موجودة؟ وهل البداية تساوي الوجهة؟
3. **تنفيذ BFS:** إيجاد أقصر مسار وتسجيل ترتيب الاجتياز
4. **عرض النتائج:** إظهار المسار وعدد المحطات في الواجهة
5. **التصوّر:** تحريك الرسم البياني وإبراز المسار النهائي
## هياكل البيانات المستخدمة
- **Dictionary** لتمثيل الرسم البياني
- **Queue (deque)** لتنفيذ BFS
- **Set** للمحطات المزارة
- **List** لتتبع المسار
## أبرز مميزات النظام
- حساب أقصر مسار
- واجهة تفاعلية
- تحريك الرسم البياني لحظيًا
- معالجة الأخطاء في المدخلات
- عرض واضح لشبكة المترو
- عرض اجتياز BFS خطوة بخطوة
## تحسينات مستقبلية مقترحة
- إضافة خريطة حقيقية للإسكندرية كخلفية
- إضافة زمن الرحلة بين المحطات
- إضافة حركة قطار متحرك
- إضافة مؤثرات صوتية للمحطات
- إضافة مقارنة بين عدة مسارات