\documentclass{bschlangaul-aufgabe} \bLadePakete{graph,java} \begin{document} \bAufgabenMetadaten{ Titel = {gerichteter Distanzgraph angegeben durch Adjazenzmatrix}, Thematik = {Graph M A P R N}, Referenz = AUD.Graphen.Dijkstra.Graph-M-A-P-R-N, RelativerPfad = Module/30_AUD/90_Graphen/10_Dijkstra/Aufgabe_Graph-M-A-P-R-N.tex, ZitatSchluessel = aud:ab:6, ZitatBeschreibung = {(Check-Up) Seite 3, Aufgabe 5}, BearbeitungsStand = unbekannt, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Algorithmus von Dijkstra, Halde (Heap)}, } Ein gerichteter Distanzgraph sei durch seine Adjazenzmatrix gegeben (in einer Zeile stehen die Längen der von dem Zeilenkopf ausgehenden Wege.) \footcite[(Check-Up) Seite 3, Aufgabe 5]{aud:ab:6} \index{Algorithmus von Dijkstra} \begin{bGraphenFormat} M: -1 0 A: 0 -3 P: 2 2 R: 5 0 N: 4 -3 A -> M: 5 P -> M: 10 P -> A: 3 R -> A: 9 N -> A: 2 A -> P: 2 R -> P: 1 N -> R: 4 M -> N: 7 R -> N: 6 \end{bGraphenFormat} \[ \begin{blockarray}{cccccc} & A & M & N & P & R \\ \begin{block}{c(ccccc)} A & * & 5 & - & 2 & - \\ M & - & * & 7 & - & - \\ N & 2 & - & * & - & 4 \\ P & 3 & 10 & - & * & - \\ R & 9 & - & 6 & 1 & * \\ \end{block} \end{blockarray} \] \begin{enumerate} %% % (a) %% \item Stellen Sie den Graph in der üblichen Form dar. \begin{bAntwort} \begin{center} \begin{tikzpicture}[li graph] \node (A) at (0,-3) {A}; \node (M) at (-1,0) {M}; \node (N) at (4,-3) {N}; \node (P) at (2,2) {P}; \node (R) at (5,0) {R}; \path[->] (A) edge node {5} (M); \path[->] (A) edge[bend left=15] node {2} (P); \path[->] (M) edge node {7} (N); \path[->] (N) edge node {2} (A); \path[->] (N) edge[bend left=15] node {4} (R); \path[->] (P) edge[bend left=15] node {3} (A); \path[->] (P) edge node {10} (M); \path[->] (R) edge node {9} (A); \path[->] (R) edge[bend left=15] node {6} (N); \path[->] (R) edge node {} (P); \end{tikzpicture} \end{center} \end{bAntwort} %% % (b) %% \item Bestimmen Sie mit dem Algorithmus von Dijkstra ausgehend von $M$ die kürzeste Wege zu allen anderen Knoten. \begin{bAntwort} \begin{tabular}{lllllll} \bf{Nr.} & \bf{besucht} & \bf{A} & \bf{M} & \bf{N} & \bf{P} & \bf{R} \\ \hline 0 & & $\infty$ & 0 & $\infty$ & $\infty$ & $\infty$ \\ 1 & M & $\infty$ & \bf{0} & 7 & $\infty$ & $\infty$ \\ 2 & N & 9 & | & \bf{7} & $\infty$ & 11 \\ 3 & A & \bf{9} & | & | & 11 & 11 \\ 4 & P & | & | & | & \bf{11} & 11 \\ 5 & R & | & | & | & | & \bf{11} \\ \end{tabular} \begin{tabular}{llll} \bf{nach} & \bf{Entfernung} & \bf{Reihenfolge} & \bf{Pfad} \\ \hline M $\rightarrow$ A & 9 & 3 & M $\rightarrow$ N $\rightarrow$ A \\ M $\rightarrow$ M & 0 & 1 & \\ M $\rightarrow$ N & 7 & 2 & M $\rightarrow$ N \\ M $\rightarrow$ P & 11 & 4 & M $\rightarrow$ N $\rightarrow$ A $\rightarrow$ P \\ M $\rightarrow$ R & 11 & 5 & M $\rightarrow$ N $\rightarrow$ R \\ \end{tabular} \end{bAntwort} %% % (c) %% \item Beschreiben Sie wie ein Heap\index{Halde (Heap)} als Prioritätswarteschlange in diesem Algorithmus verwendet werden kann. \begin{bAntwort} Ein Heap kann in diesem Algorithmus dazu verwendet werden, den nächsten Knoten mit der kürzesten Distanz zum Startknoten auszuwählen. \end{bAntwort} %% % (d) %% \item Geben Sie die Operation \emph{„Entfernen des Minimums“} für einen Heap an. Dazu gehört selbstverständlich die Restrukturierung des Heaps. \begin{bAntwort} \bJavaDatei[firstline=5,lastline=38]{aufgaben/aud/baum/Heap} \end{bAntwort} \end{enumerate} \end{document}