mehrere Verbesserungen

- "Fulkersen" zu "Fulkerson"
- "Flüsse zurücksetzen"-funktion
- farbliche Markierungen in Ansicht "Kapazitäten und Flüsse".
main
Konrad Krauth 2024-10-15 10:32:38 +02:00
parent d74058bd8b
commit 48eb5d0266
1 changed files with 18 additions and 3 deletions

View File

@ -94,7 +94,7 @@ function draw(){
} }
}else if(shownEdges=="capacity_and_flows"){ }else if(shownEdges=="capacity_and_flows"){
if(edgesCapacity[vertex.name][otherVertex.name]>0){ if(edgesCapacity[vertex.name][otherVertex.name]>0){
drawEdge(vertex,otherVertex,getEdge(edgesFlow,vertex.name,otherVertex.name)+"/"+edgesCapacity[vertex.name][otherVertex.name],"black","white"); drawEdge(vertex,otherVertex,getEdge(edgesFlow,vertex.name,otherVertex.name)+"/"+edgesCapacity[vertex.name][otherVertex.name],"black",edgesFlow[vertex.name][otherVertex.name]>0?(edgesFlow[vertex.name][otherVertex.name]==edgesCapacity[vertex.name][otherVertex.name]?"#ff88ff":"#8888ff"):"white");
} }
} }
} }
@ -189,6 +189,21 @@ function parseGraph(){
}; };
draw(); draw();
} }
function resetFlows(){
done=false;
iterations=0;
totalFlow=0;
for(let vertex in verticesMap){
edgesFlow[vertex]={};
}
calculatePossibleNextSteps();
draw();
statusSim.innerText="Graph zurückgesetzt";
if(bfs()==undefined){
statusSim.innerText+="- Es gibt von Anfang an keinen augmentierenden Pfad, der Algorithmus braucht nicht angewandt zu werden.";
done=true;
};
}
function bfs(){ function bfs(){
let searches=[["s"]]; let searches=[["s"]];
let visitedVertices=["s"]; let visitedVertices=["s"];
@ -388,7 +403,7 @@ body {
</style> </style>
</head> </head>
<body onload="initializeEventHandlers();resetToDefaultGraph();parseGraph()"> <body onload="initializeEventHandlers();resetToDefaultGraph();parseGraph()">
<h1>Simulation des Ford-Fulkersen-Algorithmus</h1> <h1>Simulation des Ford-Fulkerson-Algorithmus</h1>
<h2> Graph definieren </h2> <h2> Graph definieren </h2>
<b>Knoten</b>, mit Semikolon getrennt (s und t werden nicht mit angegeben) <b>Knoten</b>, mit Semikolon getrennt (s und t werden nicht mit angegeben)
@ -407,7 +422,7 @@ body {
<br> Mausklick: <br> Mausklick:
<button onclick="editMode='drag';draw()"> verschiebt Knoten </button> <button onclick="editMode='drag';draw()"> verschiebt Knoten </button>
<button onclick="editMode='flow';draw()"> wählt Flusspfade aus </button> <button onclick="editMode='flow';draw()"> wählt Flusspfade aus </button>
<br> Aktion: <button onclick="generateNewFlow()">Fluss aus ausgewähltem augmentierenden Pfad erstellen</button> <button onclick="selectShortestPath();">kürzesten s-t-Pfad auswählen (Edmonds-Karp)</button> <button onclick="selectRandomPath();">zufälligen s-t-Pfad auswählen</button> <button onclick="edmondsKarp()">Edmonds-Karp-Algorithmus vollständig durchlaufen lassen</button> <button onclick="randomFordFulkerson()">Zufalls-Ford-Fulkerson-Algorithmus vollständig durchlaufen lassen</button> <br> Aktion: <button onclick="generateNewFlow()">Fluss aus ausgewähltem augmentierenden Pfad erstellen</button> <button onclick="selectShortestPath();">kürzesten s-t-Pfad auswählen (Edmonds-Karp)</button> <button onclick="selectRandomPath();">zufälligen s-t-Pfad auswählen</button> <button onclick="edmondsKarp()">Edmonds-Karp-Algorithmus vollständig durchlaufen lassen</button> <button onclick="randomFordFulkerson()">Zufalls-Ford-Fulkerson-Algorithmus vollständig durchlaufen lassen</button> <button onclick="resetFlows()">Flüsse zurücksetzen</button>
<br> <span id="statusSim"> </span> <br> <span id="statusSim"> </span>
<canvas id="c" width=600 height=300 style="width:100%"> </canvas> <canvas id="c" width=600 height=300 style="width:100%"> </canvas>
</body> </body>