Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | import GraphAction from '../../utils/GraphAction'; import Stack from '../trekhleb/src/data-structures/stack/Stack'; import Color from '../../utils/Color'; export default function dfs(graph, startVertex) { const stack = new Stack(); const visited = []; const actions = []; stack.push(startVertex); actions.push({ do: { action: GraphAction.HIGHLIGHT_NODE, color: Color.GRAPH_HIGHLIGHTED_NODE, elements: startVertex.getKey(), }, undo: { action: GraphAction.HIGHLIGHT_NODE, color: Color.BASE_COLOR_NODE, elements: startVertex.getKey(), }, }); while (!stack.isEmpty()) { const action = []; const currentVertex = stack.pop(); action.push({ do: { action: GraphAction.HIGHLIGHT_NODE, color: Color.GRAPH_RESULT_TRUE, elements: currentVertex.getKey(), }, undo: { action: GraphAction.HIGHLIGHT_NODE, color: Color.GRAPH_HIGHLIGHTED_NODE, elements: currentVertex.getKey(), }, }); if (!(visited.includes(currentVertex))) { visited.push(currentVertex); } currentVertex.getNeighbors().filter((item) => !(visited.includes(item))).forEach((item) => { stack.push(item); action.push({ do: { action: GraphAction.HIGHLIGHT_NODE, color: Color.GRAPH_HIGHLIGHTED_NODE, elements: item.getKey(), }, undo: { action: GraphAction.HIGHLIGHT_NODE, color: Color.BASE_COLOR_NODE, elements: item.getKey(), }, }); }); actions.push(action); } return actions; } |