@@ -5,63 +5,19 @@ import { HiChevronDoubleRight } from "react-icons/hi2";
55import { HiOutlineFlag } from "react-icons/hi" ;
66import { Cell } from '../algorithms/utils/PathfindingUtils' ;
77import MazeGrid from '../components/MazeGrid.tsx' ;
8- import { BreadthFirstSearch } from '../algorithms/pathfinding/BreadthFirstSearch.ts' ;
9- import { Dijkstra } from '../algorithms/pathfinding/Dijkstra.ts' ;
10- import { DepthFirstSearch } from '../algorithms/pathfinding/DepthFirstSearch.ts' ;
11- import { primsMazeGeneration } from '../algorithms/mazes/PrimsMazeGeneration.ts' ;
12- import { dfsMazeGeneration } from '../algorithms/mazes/DFSMazeGeneration.ts' ;
138import mazeHooks from '../utils/mazeHooks.ts' ;
9+ import pathfindingAlgorithmHooks from '../utils/pathfindingAlgorithmHooks.ts' ;
1410
1511const PathfindingVisualiser : React . FC = ( ) => {
1612 const { width = 0 , height = 0 } = useWindowDimensions ( ) ;
1713 const [ isDrawing , setIsDrawing ] = useState < boolean > ( false ) ;
1814 const [ drawingValue , setDrawingValue ] = useState < boolean > ( false ) ;
1915 const [ isMovingNode , setIsMovingNode ] = useState < 'start' | 'end' | null > ( null ) ;
20- const [ runDijkstra , setRunDijkstra ] = useState < boolean > ( false ) ;
21- const [ runBFS , setRunBFS ] = useState < boolean > ( false ) ;
22- const [ runDFS , setRunDFS ] = useState < boolean > ( false ) ;
23- const [ generatePrimsMaze , setGeneratePrimsMaze ] = useState < boolean > ( false ) ;
24- const [ generateDFSMaze , setGenerateDFSMaze ] = useState < boolean > ( false ) ;
2516
2617 useEffect ( ( ) => {
2718 generateTable ( ) ;
2819 } , [ width , height ] ) ;
2920
30- useEffect ( ( ) => {
31- if ( runDijkstra ) {
32- callDijkstra ( ) ;
33- setRunDijkstra ( false ) ;
34- }
35- } , [ runDijkstra ] ) ;
36-
37- useEffect ( ( ) => {
38- if ( runBFS ) {
39- callBFS ( ) ;
40- setRunBFS ( false ) ;
41- }
42- } , [ runBFS ] ) ;
43-
44- useEffect ( ( ) => {
45- if ( runDFS ) {
46- callDFS ( ) ;
47- setRunDFS ( false ) ;
48- }
49- } , [ runDFS ] ) ;
50-
51- useEffect ( ( ) => {
52- if ( generatePrimsMaze ) {
53- primsMazeRun ( ) ;
54- setGeneratePrimsMaze ( false ) ;
55- }
56- } , [ generatePrimsMaze ] ) ;
57-
58- useEffect ( ( ) => {
59- if ( generateDFSMaze ) {
60- DFSMazeRun ( ) ;
61- setGenerateDFSMaze ( false ) ;
62- }
63- } , [ generateDFSMaze ] ) ;
64-
6521 const {
6622 maze,
6723 setMaze,
@@ -74,6 +30,15 @@ const PathfindingVisualiser: React.FC = () => {
7430 populateOptimalPath,
7531 } = mazeHooks ( width , height ) ;
7632
33+ const { triggerAlgorithm } = pathfindingAlgorithmHooks ( {
34+ clearLatestRun,
35+ populateOptimalPath,
36+ maze,
37+ startNode,
38+ endNode,
39+ setMaze,
40+ } ) ;
41+
7742 const handleMouseDown = ( rowIndex : number , colIndex : number ) => {
7843 if ( maze [ rowIndex ] [ colIndex ] . start ) {
7944 setIsMovingNode ( 'start' ) ;
@@ -126,57 +91,9 @@ const PathfindingVisualiser: React.FC = () => {
12691 } ) ;
12792 } ;
12893
129- async function callBFS ( ) {
130- const optimalPath = await BreadthFirstSearch ( maze , maze [ startNode [ 0 ] ] [ startNode [ 1 ] ] , maze [ endNode [ 0 ] ] [ endNode [ 1 ] ] , setMaze ) ;
131- await populateOptimalPath ( optimalPath ) ;
132- }
133-
134- async function callDijkstra ( ) {
135- const optimalPath = await Dijkstra ( maze , maze [ startNode [ 0 ] ] [ startNode [ 1 ] ] , maze [ endNode [ 0 ] ] [ endNode [ 1 ] ] , setMaze ) ;
136- await populateOptimalPath ( optimalPath ) ;
137- }
138-
139- async function callDFS ( ) {
140- const optimalPath = await DepthFirstSearch ( maze , maze [ startNode [ 0 ] ] [ startNode [ 1 ] ] , maze [ endNode [ 0 ] ] [ endNode [ 1 ] ] , setMaze ) ;
141- await populateOptimalPath ( optimalPath ) ;
142- }
143-
144- function triggerBFS ( ) {
145- clearAttribute ( 'visited' ) ;
146- clearAttribute ( 'finalPath' ) ;
147- setRunBFS ( true ) ;
148- }
149-
150- function triggerDijkstra ( ) {
151- clearAttribute ( 'visited' ) ;
152- clearAttribute ( 'finalPath' ) ;
153- setRunDijkstra ( true ) ;
154- }
155-
156- function triggerDFS ( ) {
94+ function clearLatestRun ( ) {
15795 clearAttribute ( 'visited' ) ;
15896 clearAttribute ( 'finalPath' ) ;
159- setRunDFS ( true ) ;
160- }
161-
162- function triggerPrimsMaze ( ) {
163- clearAttribute ( 'visited' ) ;
164- clearAttribute ( 'finalPath' ) ;
165- setGeneratePrimsMaze ( true ) ;
166- }
167-
168- function triggerDFSMaze ( ) {
169- clearAttribute ( 'visited' ) ;
170- clearAttribute ( 'finalPath' ) ;
171- setGenerateDFSMaze ( true ) ;
172- }
173-
174- function primsMazeRun ( ) {
175- primsMazeGeneration ( maze , maze [ startNode [ 0 ] ] [ startNode [ 1 ] ] , maze [ endNode [ 0 ] ] [ endNode [ 1 ] ] , setMaze ) ;
176- }
177-
178- function DFSMazeRun ( ) {
179- dfsMazeGeneration ( maze , maze [ startNode [ 0 ] ] [ startNode [ 1 ] ] , maze [ endNode [ 0 ] ] [ endNode [ 1 ] ] , setMaze ) ;
18097 }
18198
18299 return (
@@ -187,13 +104,13 @@ const PathfindingVisualiser: React.FC = () => {
187104 handleMouseEnter = { handleMouseEnter }
188105 handleMouseUp = { handleMouseUp }
189106 />
190- < button onClick = { ( ) => { triggerBFS ( ) ; } } style = { { backgroundColor : 'white' , color : 'black' } } > Run BFS Visualisation</ button >
191- < button onClick = { ( ) => { triggerDFS ( ) ; } } style = { { backgroundColor : 'white' , color : 'black' } } > Run DFS Visualisation</ button >
192- < button onClick = { ( ) => { triggerDijkstra ( ) ; } } style = { { backgroundColor : 'white' , color : 'black' } } > Run Djikstra Visualisation</ button >
193- < button onClick = { ( ) => { triggerPrimsMaze ( ) ; } } style = { { backgroundColor : 'white' , color : 'black' } } > Generate Prims Maze</ button >
194- < button onClick = { ( ) => { triggerDFSMaze ( ) ; } } style = { { backgroundColor : 'white' , color : 'black' } } > Generate DFS Maze</ button >
107+ < button onClick = { ( ) => triggerAlgorithm ( 'bfs' ) } style = { { backgroundColor : 'white' , color : 'black' } } > Run BFS Visualisation</ button >
108+ < button onClick = { ( ) => triggerAlgorithm ( 'dfs' ) } style = { { backgroundColor : 'white' , color : 'black' } } > Run DFS Visualisation</ button >
109+ < button onClick = { ( ) => triggerAlgorithm ( 'dijkstra' ) } style = { { backgroundColor : 'white' , color : 'black' } } > Run Djikstra Visualisation</ button >
110+ < button onClick = { ( ) => triggerAlgorithm ( 'primsMaze' ) } style = { { backgroundColor : 'white' , color : 'black' } } > Generate Prims Maze</ button >
111+ < button onClick = { ( ) => triggerAlgorithm ( 'dfsMaze' ) } style = { { backgroundColor : 'white' , color : 'black' } } > Generate DFS Maze</ button >
195112 < button onClick = { ( ) => generateTable ( ) } style = { { backgroundColor : 'white' , color : 'black' } } > Reset Board</ button >
196- < button onClick = { ( ) => { clearAttribute ( 'visited' ) ; clearAttribute ( 'finalPath' ) } } style = { { backgroundColor : 'white' , color : 'black' } } > Clear Latest Run</ button >
113+ < button onClick = { ( ) => clearLatestRun ( ) } style = { { backgroundColor : 'white' , color : 'black' } } > Clear Latest Run</ button >
197114 </ div >
198115 ) ;
199116} ;
0 commit comments