simon-git: puzzles (main): Simon Tatham

Commits to Tartarus hosted VCS tartarus-commits at lists.tartarus.org
Fri Feb 3 23:26:21 GMT 2023


TL;DR:
  517b14e Palisade: replace dfs_dsf() with a simple iteration.

Repository:     https://git.tartarus.org/simon/puzzles.git
On the web:     https://git.tartarus.org/?p=simon/puzzles.git
Branch updated: main
Committer:      Simon Tatham <anakin at pobox.com>
Date:           2023-02-03 23:26:21

commit 517b14e666b0b71fc0bcd5da1b22cdc90d3434c9
web diff https://git.tartarus.org/?p=simon/puzzles.git;a=commitdiff;h=517b14e666b0b71fc0bcd5da1b22cdc90d3434c9;hp=843d4ca17def11671809786f2a5aebd75f230dd9
Author: Simon Tatham <anakin at pobox.com>
Date:   Fri Feb 3 23:12:38 2023 +0000

    Palisade: replace dfs_dsf() with a simple iteration.
    
    The whole purpose of a dsf is that you can traverse the edges of your
    graph in any order you feel like. So if you want to build the
    connected components of a graph you can just loop over all the edges
    once. There's no need to run a depth-first search.
    
    In fact there were an amazing number of things wrong with this 10-line
    function:
    
     - As Ben points out in commit 21193eaf9308ace, it didn't bother with
       bounds checking when searching the grid, instead relying on the
       never-removed grid boundary to stop the search - which was fragile in
       the face of other bugs.
    
     - The recursion uses linear stack, which is much worse than linear
       heap, since stacks are often much more limited. (And the dsf _also_
       used linear heap.)
    
     - The recursion was completely unnecessary.
    
     - The function used internal knowledge about dsf.c in order to define
       the value UNVISITED to match what would happen to work.
    
     - The name 'dfs_dsf' is totally confusing and almost impossible to
       type!

 palisade.c | 36 ++++++++++++++++--------------------
 1 file changed, 16 insertions(+), 20 deletions(-)



More information about the tartarus-commits mailing list