اكتب كلاس باسم Graph يُمثل رسمًا بيانيًا باستخدام قائمة المجاورة (Adjacency List).
المطلوب:
- الكلاس يأخذ في البناء
directed(افتراضيًاFalse) - يجب تطبيق الدوال التالية:
add_vertex(vertex): تُضيف عقدة جديدةadd_edge(v1, v2): تُضيف حافة بين عقدتينget_neighbors(vertex): تُرجع قائمة الجيران لعقدة معينةhas_path(start, end): تتحقق إذا كان هناك مسار بين عقدتين (استخدم BFS أو DFS)
- إذا كان الرسم غير موجه، الحافة يجب أن تُضاف في الاتجاهين
مثال:
g = Graph()
g.add_vertex("A")
g.add_vertex("B")
g.add_vertex("C")
g.add_edge("A", "B")
g.add_edge("B", "C")
g.get_neighbors("A") # ["B"]
g.get_neighbors("B") # ["A", "C"]
g.has_path("A", "C") # True
g.has_path("A", "D") # False
ملاحظات:
- استخدم قاموس لتخزين العقد وجيرانها
- للبحث عن مسار، استخدم BFS مع طابور أو DFS مع مكدس