From eba13bb713a1425cc1daa936cbe4f26a264ca1c5 Mon Sep 17 00:00:00 2001 From: Konrad Krauth <2120694@stud.hs-mannheim.de> Date: Wed, 27 Nov 2024 14:50:11 +0100 Subject: [PATCH] Minimaler Schnitt wird hervorgehoben, wenn der Algorithmus fertig ist --- ford-fulkerson.html | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/ford-fulkerson.html b/ford-fulkerson.html index c0a7a14..a789135 100644 --- a/ford-fulkerson.html +++ b/ford-fulkerson.html @@ -18,6 +18,7 @@ editMode="drag"; draggedVertex=null; possibleNextSteps=[]; flowVertices=["s"]; +reachableFromStart=null; function draw(){ function drawEdge(vertexFrom,vertexTo,number,fillColor,strokeColor){ co.fillStyle=fillColor; @@ -49,12 +50,24 @@ function draw(){ co.fillStyle="#888888" co.fillRect(0,0,1000,1000); for(let vertex of vertices){ + let vertexReachable=false; + if(done){ + for(let reachableOne of reachableFromStart){ + if(reachableOne==vertex.name){ + vertexReachable=true; + } + } + } if(vertex.special=="source"){ co.fillStyle="#aaffaa"; }else if(vertex.special=="target"){ co.fillStyle="#ffaaaa"; }else{ co.fillStyle="white"; + if(done){ + co.fillStyle="#ffaaaa"; + if(vertexReachable){co.fillStyle="#aaffaa"} + } for(let alreadyVisited of flowVertices){ if(alreadyVisited==vertex.name){ co.fillStyle="#aaaaff"; @@ -77,9 +90,23 @@ function draw(){ } co.fillStyle="black"; + co.font="10px sans-serif"; co.fillText(vertex.name,vertex.x,vertex.y,20); for(let otherVertex of vertices){ + + if(vertexReachable){ + otherVertexReachable=false; + for(let reachableOne of reachableFromStart){ + if(reachableOne==otherVertex.name){ + otherVertexReachable=true; + } + } + if(otherVertexReachable==false){ + co.font="bold 15px sans-serif"; + } + } + if(shownEdges=="capacity"){ if(edgesCapacity[vertex.name][otherVertex.name]>0){ drawEdge(vertex,otherVertex,edgesCapacity[vertex.name][otherVertex.name],"black","white"); @@ -97,6 +124,7 @@ function draw(){ 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"); } } + co.font="10px sans-serif"; } } for(let i=0;i0){ currentSearch=searches.shift(); if(currentSearch[currentSearch.length-1]=="t"){ @@ -229,6 +256,7 @@ function bfs(){ } } } + reachableFromStart=visitedVertices; } function selectShortestPath(){ result=bfs(); @@ -243,7 +271,7 @@ function selectShortestPath(){ function selectRandomPath(){ flowVertices=["s"]; let visitedVertices=["s"]; - for(let i=0;i<2000;i++){ + for(let i=0;i<20000;i++){ calculatePossibleNextSteps(); let nextSteps=[]; for(let step of possibleNextSteps){ @@ -350,12 +378,12 @@ function generateNewFlow(){ totalFlow+=newFlow; flowVertices=["s"]; calculatePossibleNextSteps(); - draw(); statusSim.innerText="Iteration "+iterations+". Augmentierender Pfad mit Flusskapazität "+newFlow+" hinzugefügt. Insgesamt hat der Fluss die Kapazität "+totalFlow+"."; if(bfs()==undefined){ statusSim.innerText+=" Es gibt keinen augmentierenden Pfad mehr, der Algorithmus ist fertig."; done=true; - }; + } + draw(); } function resetToDefaultGraph(){ vDef.value="u;v;w;x;y;z;";