Breitensuche

Animation der Breitensuche in einem Baum

Breitensuche (englisch breadth-first search, BFS) ist ein Verfahren in der Informatik zum Durchsuchen bzw. Durchlaufen der Knoten eines Graphen. Sie zählt zu den uninformierten Suchalgorithmen. Im Gegensatz zur Tiefensuche werden zunächst alle Knoten beschritten, die vom Ausgangsknoten direkt erreichbar sind. Erst danach werden Folgeknoten beschritten (siehe Abbildung).

Arbeitsweise

Die Breitensuche ist eine uninformierte Suche, welche durch Expansion der einzelnen Level der Graphen ausgehend vom Startknoten den Graph in die Breite nach einem Element durchsucht.

Zuerst wird ein Startknoten ausgewählt. Von diesem Knoten aus wird nun jede Kante betrachtet und getestet, ob der gegenüberliegende Knoten schon entdeckt wurde bzw. das gesuchte Element ist. Ist dies noch nicht der Fall, so wird der entsprechende Knoten in einer Warteschlange gespeichert und im nächsten Schritt bearbeitet. Hierbei ist zu beachten, dass Breitensuche immer zuerst alle Knoten der gleichen Ebene bearbeitet, und nicht wie die Tiefensuche einem Pfad in die Tiefe folgt. Nachdem alle Kanten des Ausgangsknotens betrachtet wurden, wird der erste Knoten der Warteschlange entnommen und das Verfahren wiederholt.

Eine graphentheoretische Landkarte von Deutschland, Österreich und der Schweiz mit den Verbindungen zwischen einigen Städten. Dieses Beispiel ist ein ungerichteter Graph mit 10 Knoten.
Der Baum, welcher entsteht, wenn man Breitensuche auf die Landkarte anwendet und in Hannover startet. Dieser Baum hat die Höhe 4. Daher hat die Breitensuche in diesem Fall 4 Iterationsschritte.

Der Index des Iterationsschritts in der while-Schleife (siehe unten) entspricht dabei dem Knotenabstand des aktuell durchlaufenen Knotens vom Startknoten. Dieser Index müsste, um zum Beispiel auf der Konsole ausgegeben zu werden, in einer Variablen gespeichert werden.

Im Beispiel mit den Städten (siehe oben) gibt es 4 Iterationsschritte:

  • Iterationsschritt 0: Hannover (Knotenabstand 0)
  • Iterationsschritt 1: Frankfurt, Hamburg, Berlin (Knotenabstand 1)
  • Iterationsschritt 2: Zürich, Stuttgart, Mannheim, Wien (Knotenabstand 2)
  • Iterationsschritt 3: München, Dresden (Knotenabstand 3)

Der Knotenabstand bezieht sich immer auf den Startknoten. Im links dargestellten ungerichteten Graphen ist es Hannover. Bei gerichteten Graphen ist der Knotenabstand zwischen zwei verschiedenen Knoten nicht unbedingt symmetrisch.

In einem gerichteten Graphen könnte zum Beispiel der Knotenabstand von Hannover nach Mannheim ebenfalls 2 sein. Der Knotenabstand von Mannheim nach Hannover jedoch könnte gleich 1 sein, wenn es eine Kante (direkte Verbindung) von Mannheim nach Hannover gäbe. Er könnte auch gleich 2, gleich 3 oder größer sein.

Der Knotenabstand und die Anzahl der Iterationsschritte ist nur für zusammenhängende Graphen definiert und hängt vom Startknoten ab. Für nicht zusammenhängende Graphen ist der Knotenabstand und die Anzahl der Iterationsschritte nur innerhalb jeder Zusammenhangskomponente definiert.

Hinweis: Der in der Abbildung links oben mit den Städten gezeigte Graph ist ein ungerichteter Graph. Die Reihenfolge der durchlaufenen Knoten kann sich ändern, wenn stattdessen ein anderer Startknoten oder ein gerichteter Graph genommen wird, der nicht symmetrisch ist.

Algorithmus

  1. Bestimme den Knoten, an dem die Suche beginnen soll, markiere ihn als gesehen und speichere ihn in einer Warteschlange ab.
  2. Entnimm einen Knoten vom Beginn der Warteschlange.
    • Falls das gesuchte Element gefunden wurde, brich die Suche ab und liefere „gefunden“ zurück.
    • Anderenfalls hänge alle bisher unmarkierten Nachfolger dieses Knotens ans Ende der Warteschlange an und markiere sie als gesehen.
  3. Wenn die Warteschlange leer ist, dann wurde jeder Knoten bereits untersucht. Beende die Suche und liefere „nicht gefunden“ zurück.
  4. Wiederhole Schritt 2.

Nachstehend formulierte Algorithmen sind als Pseudocode zu verstehen und geben aus Gründen der Lesbarkeit nur an, ob der Zielknoten gefunden wurde. Weitere, in Anwendungsfällen wichtige Informationen – wie z. B. die aktuelle Pfadtiefe oder der bisherige Suchweg – könnten zusätzlich eingefügt werden.

Rekursiv formuliert:

BFS(start_node, goal_node)
    return BFS'({start_node}, ∅, goal_node);

BFS'(fringe, gesehen, goal_node)
    if(fringe == ∅)
    // Knoten nicht gefunden
        return false;
    if (goal_nodefringe)
        return true;
    return BFS'({child | xfringe, child ∈ nachfolger(x)} \ gesehen, gesehenfringe, goal_node);

Als Schleife formuliert:

BFS(start_node, goal_node)
    erzeuge eine leere Warteschlange queue
    queue.enqueue(start_node);
    markiere start_node als gesehen
    while queue ist nicht leer
        node = queue.dequeue();
        if node == goal_node
            return true;
        foreach child in nachfolger(node)
            if child ist nicht markiert als gesehen
                queue.enqueue(child);
                markiere child als gesehen
    return false;

Programmierung

Das folgende Beispiel in der Programmiersprache C# zeigt die Implementierung der Breitensuche für einen gerichteten Graphen. Der gerichtete Graph wird als Klasse DirectedGraph deklariert. Bei der Ausführung des Programms wird die Methode Main verwendet, die die Liste der markierten Knoten auf der Konsole ausgibt.[1]

using System;
using System.Collections.Generic;

// Deklariert die Klasse für die Knoten des Graphen
class Node
{
	public int index;
	public string value;
	public List<Node> adjacentNodes = new List<Node>(); // Liste der Nachbarknoten
}

// Deklariert die Klasse für den gerichteten Graphen
class DirectedGraph
{
	// Diese Methode verbindet die Knoten startNode und targetNode miteinander.
	public void ConnectNodes(Node startNode, Node targetNode)
	{
		startNode.adjacentNodes.Add(targetNode);
	}
}

class Program
{
	// Diese Methode gibt die Liste der Knoten in der Form A, B, C, ... als Text zurück.
	public static string ToString(List<Node> traversedNodes)
	{
		string text = "";
		for (int i = 0; i < traversedNodes.Count; i++) // for-Schleife, die die Knoten durchläuft
		{
			text += traversedNodes[i].value + ", ";
		}
		text = text.Substring(0, text.Length - 2);
		return text;
	}
	
	// Diese Methode durchläuft die Knoten des gerichteten Graphen mit einer Breitensuche
	public static List<Node> BreadthFirstSearch(Node startNode)
	{
		List<Node> traversedNodes = new List<Node>(); // Liste der Knoten für die Breitensuche
		traversedNodes.Add(startNode); // Fügt den Startenknoten der Liste hinzu
		HashSet<Node> visitedNodes = new HashSet<Node>(); // Menge der markierten Knoten
		visitedNodes.Add(startNode); // Fügt den Startenknoten der Menge der markierten Knoten hinzu
		Queue<Node> queue = new Queue<Node>(); // Warteschlange für die Breitensuche
		queue.Enqueue(startNode); // Fügt den Startenknoten der Warteschlange hinzu
		while (queue.Count > 0) // So lange die Warteschlange nicht leer ist
		{
			startNode = queue.Dequeue(); // Entfernt den ersten Knoten aus der Warteschlange
			foreach (Node node in startNode.adjacentNodes) // foreach-Schleife, die alle benachbarten Knoten des Knotens durchläuft
			{
				if (!visitedNodes.Contains(node)) // Wenn der Knoten noch nicht markiert wurde
				{
					traversedNodes.Add(node); // Fügt den Knoten der Liste hinzu
					visitedNodes.Add(node); // Markiert den Knoten
                    queue.Enqueue(node); // Fügt den Knoten der Warteschlange für die Breitensuche hinzu
				}
			}
		}
		return traversedNodes; // Gibt die Liste der Knoten zurück
	}
	
	// Hauptmethode, die das Programm ausführt
	public static void Main(string[] args)
	{
		// Deklariert und initialisiert 4 Knoten
		Node node1 = new Node{index = 0, value = "A"};
		Node node2 = new Node{index = 1, value = "B"};
		Node node3 = new Node{index = 2, value = "C"};
		Node node4 = new Node{index = 3, value = "D"};
		
		// Erzeugt einen gerichteten Graphen
		DirectedGraph directedGraph = new DirectedGraph();
		
		// Verbindet Knoten des Graphen miteinander
		directedGraph.ConnectNodes(node1, node2);
		directedGraph.ConnectNodes(node1, node3);
		directedGraph.ConnectNodes(node2, node3);
		directedGraph.ConnectNodes(node3, node1);
		directedGraph.ConnectNodes(node3, node4);
		directedGraph.ConnectNodes(node4, node4);
		
		List<Node> traversedNodes = BreadthFirstSearch(node3); // Aufruf der Methode
		Console.WriteLine(ToString(traversedNodes)); // Ausgabe auf der Konsole
		
		Console.ReadLine();
	}
}

Hinweise: Für die Nachbarknoten wurde eine Liste als Datentyp verwendet, damit die Reihenfolge der durchlaufenen Knoten eindeutig ist und die Knoten in allen Ebenen von links nach rechts durchlaufen werden. Für den Datentyp Menge zum Beispiel muss das nicht der der Fall sein. Statt dem HashSet (Menge) visitedNodes kann auch eine Liste oder ein Array vom Typ bool (Boolesche Variable) verwendet werden, wie im Einzelnachweis gezeigt.[1]

Der in der Abbildung links oben mit den Städten gezeigte Graph ist ein ungerichteter Graph. Die Reihenfolge der durchlaufenen Knoten kann sich ändern, wenn stattdessen ein anderer Startknoten oder ein gerichteter Graph genommen wird, der nicht symmetrisch ist.

Eigenschaften

Bezeichne die Anzahl der Knoten und die Anzahl der Kanten im Graphen. Speicherplatzverbrauch und Laufzeit des Algorithmus sind in Landau-Notation angegeben.

Speicherplatzverbrauch

Da alle bisher entdeckten Knoten gespeichert werden, beträgt der Speicherplatzverbrauch von Breitensuche . Die Breitensuche ist für Verfahren, bei denen die Knoten erst während der Breitensuche generiert werden (z. B. das Branch-&-Bound-Verfahren), aufgrund des großen Platzverbrauches meist ungeeignet. Ein der Breitensuche ähnliches Verfahren, das jedoch meist mit deutlich weniger Speicher auskommt, ist die iterative Tiefensuche.

Laufzeit

Da im ungünstigsten Fall alle möglichen Pfade zu allen möglichen Knoten betrachtet werden müssen, beträgt die Laufzeit der Breitensuche [2]. Beachte, dass zwischen und variieren kann, abhängig davon, wie dünn der Graph ist.

Wenn die Anzahl der Knoten im Graphen im Voraus bekannt ist und zusätzliche Datenstrukturen verwendet werden, um zu bestimmen, welche Knoten bereits zur Warteschlange hinzugefügt wurden, kann die Platzkomplexität als ausgedrückt werden. Dies gilt zusätzlich zu dem für das Graphen selbst erforderlichen Speicherplatz, der abhängig von der von einer Implementierung des Algorithmus verwendeten Graphendarstellung variieren kann.

Vollständigkeit

Wenn in jedem Knoten nur endlich viele Alternativen existieren, ist die Breitensuche vollständig. Dies bedeutet, dass, wenn eine Lösung existiert, diese auch gefunden wird. Dies ist unabhängig davon, ob der zugrunde liegende Graph endlich ist oder nicht. Sollte jedoch keine Lösung existieren, so divergiert die Breitensuche bei einem unendlichen Graphen.

Bei der Analyse von Algorithmen wird angenommen, dass die Eingabe für die Breitensuche ein endlicher Graph ist, der explizit als Adjazenzliste oder ähnlich dargestellt wird. Bei der Anwendung von Graph-Traversierungen in der künstlichen Intelligenz kann die Eingabe jedoch eine implizite Darstellung eines unendlichen Graphen sein. In diesem Zusammenhang wird ein Suchverfahren als vollständig beschrieben, wenn garantiert wird, dass ein Zielzustand gefunden wird, falls einer existiert. Die Breitensuche ist abgeschlossen, die Tiefensuche jedoch nicht. Bei Anwendung auf unendlich viele Graphen, die implizit dargestellt werden, findet die Breitensuche schließlich den Zielzustand, aber die Tiefensuche kann in Teilen des Graphen verloren gehen, die keinen Zielzustand haben und niemals zurückkehren.[3]

Optimalität

Jede durch Breitensuche gefundene Lösung hat den kürzesten Abstand zum Wurzelknoten. Führt man Kantengewichte ein, so muss das Ergebnis, welches am nächsten zum Startknoten liegt, nicht notwendigerweise auch das Ergebnis mit den geringsten Pfadkosten sein. Dieses Problem umgeht man, indem man die Breitensuche zur uniformen Kostensuche erweitert. Sind jedoch alle Kantengewichte äquivalent, so ist jede durch Breitensuche gefundene Lösung optimal, da in diesem Fall die Lösung, die am nächsten zum Ausgangsknoten liegt, auch die Lösung mit den geringsten Kosten ist. Ob existierende Lösungen überhaupt gefunden werden hängt mit Endlichkeitseigenschaften des Suchbaums zusammen (siehe Vollständigkeit).

Die uniforme Kostensuche (englisch uniform-cost search) ist eine Erweiterung der Breitensuche für Graphen mit gewichteten Kanten. Der Algorithmus besucht Knoten in Reihenfolge aufsteigender Pfadkosten vom Wurzelknoten und wird deshalb üblicherweise mit einer Vorrangwarteschlange implementiert, in der alle noch nicht besuchten Nachbarn bereits besuchter Knoten mit der Pfadlänge als Schlüssel verwaltet werden. Die Optimalität ist nur für nicht-negative Kantengewichte garantiert.

Anwendung

Die Breitensuche kann für viele Fragestellungen in der Graphentheorie verwendet werden. Einige sind:

  • Finde alle Knoten innerhalb einer Zusammenhangskomponente
  • Prüfe, ob der gegebene Graph paar ist und finde ggf. eine zulässige 2-Färbung seiner Knoten[4]
  • Finde zwischen zwei Knoten u und w einen kürzesten Pfad (ungewichtete Kanten)
  • Kürzeste-Kreise-Problem

Siehe auch

Literatur

  • Thomas H. Cormen, Charles Leiserson, Ronald L. Rivest, Clifford Stein: Introduction to Algorithms. MIT Press, 2nd edition 2001, ISBN 0-262-53196-8
  • Sven Oliver Krumke, Hartmut Noltemeier: Graphentheoretische Konzepte und Algorithmen. 3. Auflage. Springer Vieweg, 2012, ISBN 978-3-8348-1849-2
Commons: Breitensuche – Sammlung von Bildern, Videos und Audiodateien
Wikibooks: Breitensuche – Implementierungen in der Algorithmensammlung

Einzelnachweise

  1. a b GeeksforGeeks: Breadth First Search or BFS for a Graph
  2. Winfried Hochstättler: Algorithmische Mathematik. Springer, Heidelberg, u. a. 2010, ISBN 978-3-642-05421-1, S. 56–58.
  3. Coppin, B. (2004). Artificial intelligence illuminated. Jones & Bartlett Learning. pp. 79–80.
  4. Dieter Jungnickel: Graphen, Netzwerke und Algorithmen. BI Wissenschaftsverlag, 3. Auflage 1994, ISBN 3-411-14263-4, S. 95–100

Read other articles:

Chronologies Données clés 1669 1670 1671  1672  1673 1674 1675Décennies :1640 1650 1660  1670  1680 1690 1700Siècles :XVe XVIe  XVIIe  XVIIIe XIXeMillénaires :-Ier Ier  IIe  IIIe Chronologies thématiques Art Architecture, Arts plastiques (Dessin, Gravure, Peinture et Sculpture), Littérature, Musique classique et Théâtre   Ingénierie (), Architecture et ()   Politique Droit   Religion (,)   Science Santé et ...

 

Yussuf Poulsen Informasi pribadiNama lengkap Yussuf Yurary Poulsen[1]Tanggal lahir 15 Juni 1994 (umur 29)Tempat lahir Kopenhagen, DenmarkTinggi 192 cm (6 ft 4 in)[2]Posisi bermain PenyerangInformasi klubKlub saat ini RB LeipzigNomor 9Karier junior BK Skjold0000–2011 Lyngby BKKarier senior*Tahun Tim Tampil (Gol)2011–2013 Lyngby BK 35 (11)2013– RB Leipzig 242 (63)Tim nasional‡2010 Denmark U-16 1 (0)2010–2011 Denmark U-17 19 (2)2011–2012 Denmark U...

 

Figure in the Book of Judges This article is about the biblical figure. For other uses, see Samson (disambiguation). Not to be confused with Sampson, Sanson, Samsun, or Son of Sam. SamsonSamson's Fight with the Lion (1525) by Lucas Cranach the ElderResting placeZorah, Nahal SorekPredecessorAbdonSuccessorEliPartnerDelilahParentsManoah (father)not named (mother) Judges in the Hebrew Bibleשופטים‎ Italics indicate individuals not explicitly described as judges Book of Exodus Moses Bo...

Хлудовская псалтырь. ок. 850 пергамент. 19.5 см × 15 см см Государственный исторический музей, Москва  Медиафайлы на Викискладе Хлу́довская псалты́рь — манускрипт на греческом языке, созданный в Византии около 850 г., предположительно, в константинопольском ...

 

Metropolis Part I is an EP by American electronic music trio The M Machine. It was released on April 24, 2012,[1] and is the first part of a two-part concept album describing the story of a dystopian city known as Metropolis, as described by the digital liner notes available on their website. It was released on Owsla. The songs A King Alone and Faces feature vocals from the band members, while Shadow in the Rose Garden features vocals from Kelly Koval, which themselves are sampled fro...

 

U.S. EV charging company owned by Shell Volta Charging, LLCTraded asNYSE: VLTAIndustryElectric vehicle infrastructureFounded2010; 14 years ago (2010) in HawaiiFoundersScott MercerChris WendelHeadquarters155 de Haro Street, San Francisco, California, United StatesKey peopleVince Cubbage(Interim CEO)Brandt Hastings(Chief Commercial Officer)Drew Lipsher (Chief Development Officer)Francois Chadwick(Chief Financial Officer)ParentIndependent (2010–23)Shell (2023–present)W...

Pemandangan Gunung Sinai karya El Greco Hukum Musa utamanya merujuk kepada Taurat atau lima kitab pertama dari Alkitab Ibrani, yang secara tradisional dipercaya ditulis oleh Musa. Terminologi Hukum Musa atau Taurat Musa (Ibrani Torat Moshe תֹּורַת מֹשֶׁה, Yunani Septuaginta nomos Moyse νόμος Μωυσῆ) adalah sebuah istilah biblikal yang ditemukan dalam Kitab Yosua 8:31-32 dimana Yosua menulis kata Ibrani dari Torat Moshe תֹּורַת מֹשֶׁה (diterjemahkan sebagai ...

 

American baseball player (born 1986) Not to be confused with Brian Peterson (disambiguation). Baseball player Bryan PetersenPetersen with the Miami MarlinsOutfielderBorn: (1986-04-09) April 9, 1986 (age 38)Agoura, California, U.S.Batted: LeftThrew: RightMLB debutMay 7, 2010, for the Florida MarlinsLast MLB appearanceOctober 3, 2012, for the Miami MarlinsMLB statisticsBatting average.220Home runs2Runs batted in29 Teams Florida / Miami Marlins (2010–2012) Br...

 

This article relies excessively on references to primary sources. Please improve this article by adding secondary or tertiary sources. Find sources: Power Macintosh 7600 – news · newspapers · books · scholar · JSTOR (May 2023) (Learn how and when to remove this message) Power Macintosh 7600A Power Macintosh 7600/132DeveloperApple ComputerProduct familyPower MacintoshRelease dateApril 22, 1996 (1996-04-22)Introductory priceUS$2,700 (...

Motor vehicle Bluebird Mach 1.1OverviewProduction0DesignerKen NorrisBody and chassisBody styledart-likeLayoutpaired nosewheels at the front, sft of the cockpit, with single wheels 8 ft (2.44 m) apart.PowertrainEngineTwin Bristol Siddeley BS.605 liquid-fuelled rocket enginesDimensionsLength27 ft 8 in (8.43 m)Width8 ft 6 in (2.59 m)Height3 ft 7 in (109 cm)Curb weight1,600 kg (3,500 lb) (projected) Bluebird Mach 1.1 (CMN-...

 

  提示:此条目页的主题不是萧。 簫琴簫與洞簫木管樂器樂器別名豎吹、豎篴、通洞分類管樂器相關樂器 尺八 东汉时期的陶制箫奏者人像,出土於彭山江口汉崖墓,藏於南京博物院 箫又稱洞簫、簫管,是中國古老的吹管樂器,特徵為單管、豎吹、開管、邊稜音發聲[1]。「簫」字在唐代以前本指排簫,唐宋以來,由於單管豎吹的簫日漸流行,便稱編管簫爲排簫�...

 

Russian Railways station Vologda IGeneral informationOther namesVologda-1LocationRussiaCoordinates59°12′25″N 39°52′58″E / 59.2069°N 39.8829°E / 59.2069; 39.8829Owned byRussian RailwaysOperated byRussian RailwaysConstructionParkingAvailableOther informationStatusFunctioningStation code300107Fare zoneNorthwestern Federal DistrictHistoryOpened1872ElectrifiedYes Vologda I (Russian: Вологда I, previously known as Vologda-Gorod, sometimes stylized as Volog...

此條目没有列出任何参考或来源。 (2008年1月28日)維基百科所有的內容都應該可供查證。请协助補充可靠来源以改善这篇条目。无法查证的內容可能會因為異議提出而被移除。 新紮師妹香港一系列三部曲警匪喜劇電影的名稱。分別為:新紮師妹、新紮師妹2美麗任務,新紮師妹3。分別於2002年、2003年及2006年於香港上映。 部份劇情安排和演員配搭均與美麗密令(2010)相似。 演員�...

 

Questa voce sull'argomento politici peruviani è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Manuel A. OdríaManuel A. Odría in abiti civili nel 1948 Presidente del PerùDurata mandato28 luglio 1950 –28 luglio 1956 Vice presidenteHéctor Boza Federico Bolognesi Capo del governoZenón Noriega Agüero Roque Saldías Maninat Armando Revoredo Iglesias PredecessoreZenón Noriega Agüero(come Presidente della Giunta militare) Successo...

 

Taousert Relief représentant la reine Taousert agitant des sistres, temple d'Amon (Amada), Nubie égyptienne. Période Nouvel Empire Dynastie XIXe dynastie Fonction Pharaonne Prédécesseur Siptah Dates de fonction v. 1190 à 1188 AEC[1],[note 1] Successeur Sethnakht Famille Conjoint Séthi II Enfant(s) ♂ Séthi-Mérenptah Sépulture Nom Tombe KV14, puis dans la cache royale KV35 Type Tombeau Emplacement Vallée des Rois Découvreur Ouvert dans l'Antiquité Fouilles Hartwig Altenmül...

Bangladeshi cricketer Abu JayedAbu Jayed in 2018Personal informationFull nameAbu Jayed Chowdhury RahiBorn (1993-08-02) 2 August 1993 (age 31)Sylhet, BangladeshBattingRight-handedBowlingRight-arm medium-fastInternational information National sideBangladesh (2018–present)Test debut (cap 88)4 July 2018 v PakistanLast Test26 November 2021 v PakistanODI debut (cap 131)13 May 2019 v West IndiesLast ODI15 May 2019 v IrelandT20I de...

 

The El Paso in service around 1950 The Richmond–San Rafael Ferry Company (originally Richmond–San Rafael Ferry and Transportation Company) was a ferry service between Castro Point in Richmond in Contra Costa County and San Quentin in Marin County, California across the San Pablo Bay. It ran from 1915 until the 1956 opening of the Richmond–San Rafael Bridge. History A 1920s postcard of the Charles Van Damme, City of Richmond, and City of San Rafael The Richmond–San Rafael Ferry and Tra...

 

أيام الغضبمعلومات عامةالصنف الفني دراماتاريخ الصدور 1989اللغة الأصلية عربيةالبلد  مصر الطاقمالمخرج منير راضي الكاتب بشير الديكالبطولة نور الشريف، يسرا، نجاح الموجيالتصوير ماهر راضي الموسيقى مصطفى ناجيالتركيب أحمد متوليصناعة سينمائيةالمنتج راضي كلرتعديل - تعديل مصدر�...

  لمعانٍ أخرى، طالع الغفران (توضيح). الغفران النوع دراما رومانسي مبني على مقتبسة من رواية «الحب والفراق» صناعة رجاء مخلوف تصميم الأزياء تأليف مروان ناصح (استشارة درامية) إخراج حاتم علي نهلة دروبي (مساعد) المخرج الإبداعي علي محي الدين علي (تعاون فني ) البلد سوريا  لغة ا...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (أبريل 2015) وسام البودي معلومات شخصية الاسم الكامل وسام أبو بكر البودي الميلاد 6 مارس 1980 (44 سنة)  مركز اللعب حارس مرمى  الجنسية ليبيا  الرقم 28 تعديل مصدري - تعديل ...