{"id":211,"date":"2006-02-26T12:36:08","date_gmt":"2006-02-26T20:36:08","guid":{"rendered":"http:\/\/multimedia.cx\/eggs\/?p=211"},"modified":"2006-03-10T21:32:43","modified_gmt":"2006-03-11T05:32:43","slug":"graph-traversal-puzzle","status":"publish","type":"post","link":"https:\/\/multimedia.cx\/eggs\/graph-traversal-puzzle\/","title":{"rendered":"Graph Traversal Puzzle"},"content":{"rendered":"<p><a href=\"http:\/\/sprott.physics.wisc.edu\/pickover\/home.htm\">Pickover<\/a> came through with a slightly more involved brute force challenge. As usual I&#8217;ll spare you the flowery setup (though I did find it curious that it involved a character named Ben trying to reach one named Jennifer) and distill the essential details. Given this graph of values:<\/p>\n<p><center><\/p>\n<pre>\r\n 1  2  3  4  5\r\n 6  7  8  9 10\r\n11 12 13 14 15\r\n16 17 18 19 20\r\n21 22 23 24 25\r\n<\/pre>\n<p><\/center><\/p>\n<p>find a path from any square in column 1 to any square in column 5, moving up, down, left, or right, such that the sum of all squares traversed tallies 90.<\/p>\n<p>I liked writing this program because it is the most algorithmically interesting thing I have done in a long time, even though I originally solved the wrong problem. The way I originally read the problem, the task was to move from node 1 -> node 5, traversing up, down, left, or right, and find a path where the values sum to 90.<\/p>\n<p><!--more--><\/p>\n<p>I came up with a recursive solution to try (I think) every possible path starting from node 1. I was amazed, and somewhat suspicious, that it finished nearly immediately. My program found 5 solutions which are all easily verified:<\/p>\n<pre>\r\n   1   6  11  16  17  12   7   8   3   4   5: sum = 90\r\n   1   6  11  12   7   8  13  14   9   4   5: sum = 90\r\n   1   2   7  12  17  18  13   8   3   4   5: sum = 90\r\n   1   2   7   6  11  12  13  14   9  10   5: sum = 90\r\n   1   2   3   8   7  12  13  14  15  10   5: sum = 90\r\n<\/pre>\n<p>Hey Cliff! You could use this puzzle in next year&#8217;s calendar by just altering the setup a little (&#8220;Stan, the obsessive-compulsive pothead on square 1, needs to get to his dealer&#8217;s house at square 5 but must traverse a path that tallies 90. Help Stan get his fix.&#8221;).<\/p>\n<p>Fortunately, all 5 of those solutions are valid in the context of the problem (square 1 is in column 1 and square 5 is in column 5). I modified the program a little bit to find all valid paths within the parameters of the problem. Actually, the problem never specified that squares cannot be crossed twice. That could make the solution even more complicated. Within my interpretation of the problem, my program found 39 solutions:<\/p>\n<pre>\r\n   1   6  11  16  17  12   7   8   3   4   5: sum = 90\r\n   1   6  11  12   7   8   3   4   9  14  15: sum = 90\r\n   1   6  11  12   7   8  13  14   9   4   5: sum = 90\r\n   1   6   7   2   3   8   9   4   5  10  15  20: sum = 90\r\n   1   6   7  12  13   8   9   4   5  10  15: sum = 90\r\n   1   2   7  12  17  18  13   8   3   4   5: sum = 90\r\n   1   2   7   6  11  12  13  14   9  10   5: sum = 90\r\n   1   2   3   8   7  12  13  14  15  10   5: sum = 90\r\n   6   1   2   7  12  13   8   3   4   9  10  15: sum = 90\r\n   6   1   2   7  12  13  14  15  20: sum = 90\r\n   6   1   2   7   8  13  14  19  20: sum = 90\r\n   6   1   2   3   8  13  18  19  20: sum = 90\r\n   6   1   2   3   8  13  14   9   4   5  10  15: sum = 90\r\n   6   1   2   3   8  13  14  15  10   9   4   5: sum = 90\r\n   6   1   2   3   8   7  12  13  14   9  10   5: sum = 90\r\n   6   1   2   3   4   9   8  13  14  15  10   5: sum = 90\r\n   6   1   2   3   4   5  10   9   8  13  14  15: sum = 90\r\n   6  11  12   7   8  13  14   9  10: sum = 90\r\n   6  11  12  13   8   7   2   3   4   9  10   5: sum = 90\r\n   6  11  12  13  14   9  10  15: sum = 90\r\n   6   7   8   3   4   9  14  19  20: sum = 90\r\n  11   6   1   2   7  12  13  14   9  10   5: sum = 90\r\n  11   6   1   2   7   8   3   4   9  14  15  10: sum = 90\r\n  11   6   1   2   7   8  13  14   9   4   5  10: sum = 90\r\n  11   6   7   2   3   8   9  14  15  10   5: sum = 90\r\n  11   6   7   8   9  14  15  20: sum = 90\r\n  11  16  17  12   7   8   9  10: sum = 90\r\n  11  12   7   8  13  14  15  10: sum = 90\r\n  11  12  13   8   7   2   3   4   5  10  15: sum = 90\r\n  16  11   6   1   2   3   8   9   4   5  10  15: sum = 90\r\n  16  11   6   7   8  13  14  15: sum = 90\r\n  16  11  12   7   6   1   2   3   8   9  10   5: sum = 90\r\n  16  11  12  13  14   9  10   5: sum = 90\r\n  16  17  12   7   6   1   2   3   8   9   4   5: sum = 90\r\n  16  17  12  13   8   9  10   5: sum = 90\r\n  16  17  12  13  14   9   4   5: sum = 90\r\n  16  17  18  13   8   9   4   5: sum = 90\r\n  16  17  18  19  20: sum = 90\r\n  21  16  11   6   1   2   7   8   9   4   5: sum = 90\r\n<\/pre>\n<p>Pickover&#8217;s solution is in there which was just a straight shot across row 4 (16 -> 17 -> 18 -> 19 -> 20). which makes me suspect that he came up with the matrix situation, tallied the numbers across row 4, came up with 90, added again just to be sure, and then crafted the puzzle around the pre-ordained answer.<\/p>\n<p>Here is my solution program:<\/p>\n<pre>\r\n<font COLOR=GREEN><i>\/*\r\n * Program to brute force the solution to Cliff Pickover's\r\n * 2006\/02\/11 puzzle.\r\n *\/<\/i><\/font>\r\n\r\n#include <font COLOR=BLUE SIZE=+1>&lt;<\/font>stdio<font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>h<font COLOR=BLUE SIZE=+1>&gt;<\/font>\r\n\r\n#define DIMENSION <font COLOR=BROWN>5<\/font>\r\n#define TARGET <font COLOR=BROWN>90<\/font>\r\n\r\ntypedef struct <font COLOR=BLUE SIZE=+1><b>{<\/b><\/font>\r\n    <font COLOR=RED><b>int<\/b><\/font> up<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=RED><b>int<\/b><\/font> down<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=RED><b>int<\/b><\/font> left<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=RED><b>int<\/b><\/font> right<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=RED><b>int<\/b><\/font> value<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=RED><b>int<\/b><\/font> marked<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n<font COLOR=BLUE SIZE=+1><b>}<\/b><\/font> node<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n\r\n<font COLOR=RED><b>static<\/b><\/font> node graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>DIMENSION <font COLOR=BLUE SIZE=+1>*<\/font> DIMENSION<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n<font COLOR=RED><b>static<\/b><\/font> <font COLOR=RED><b>int<\/b><\/font> path<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>DIMENSION <font COLOR=BLUE SIZE=+1>*<\/font> DIMENSION<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n<font COLOR=RED><b>static<\/b><\/font> <font COLOR=RED><b>int<\/b><\/font> path_index <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n<font COLOR=RED><b>static<\/b><\/font> <font COLOR=RED><b>int<\/b><\/font> sum <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n\r\n<font COLOR=RED><b>static<\/b><\/font> <font COLOR=RED><b>void<\/b><\/font> move_to_node<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=RED><b>int<\/b><\/font> index<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font>\r\n<font COLOR=BLUE SIZE=+1><b>{<\/b><\/font>\r\n    <font COLOR=RED><b>int<\/b><\/font> i<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n\r\n    graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>marked <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    path<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>path_index<font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1><b>]<\/b><\/font> <font COLOR=BLUE SIZE=+1>=<\/font> graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>value<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    sum <font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1>=<\/font> graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>value<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n\r\n    <font COLOR=RED><b>if<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>up <font COLOR=BLUE SIZE=+1>!<\/font><font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>&amp;<\/font><font COLOR=BLUE SIZE=+1>&amp;<\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BLUE SIZE=+1>!<\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>up<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>marked<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>{<\/b><\/font>\r\n        move_to_node<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>up<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=BLUE SIZE=+1><b>}<\/b><\/font>\r\n    <font COLOR=RED><b>if<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>down <font COLOR=BLUE SIZE=+1>!<\/font><font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>&amp;<\/font><font COLOR=BLUE SIZE=+1>&amp;<\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BLUE SIZE=+1>!<\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>down<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>marked<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>{<\/b><\/font>\r\n        move_to_node<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>down<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=BLUE SIZE=+1><b>}<\/b><\/font>\r\n    <font COLOR=RED><b>if<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>left <font COLOR=BLUE SIZE=+1>!<\/font><font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>&amp;<\/font><font COLOR=BLUE SIZE=+1>&amp;<\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BLUE SIZE=+1>!<\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>left<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>marked<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>{<\/b><\/font>\r\n        move_to_node<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>left<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=BLUE SIZE=+1><b>}<\/b><\/font>\r\n    <font COLOR=RED><b>if<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>right <font COLOR=BLUE SIZE=+1>!<\/font><font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>&amp;<\/font><font COLOR=BLUE SIZE=+1>&amp;<\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BLUE SIZE=+1>!<\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>right<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>marked<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>{<\/b><\/font>\r\n        move_to_node<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>right<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=BLUE SIZE=+1><b>}<\/b><\/font>\r\n\r\n    <font COLOR=GREEN><i>\/* check the path *\/<\/i><\/font>\r\n    <font COLOR=RED><b>if<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>sum <font COLOR=BLUE SIZE=+1>=<\/font><font COLOR=BLUE SIZE=+1>=<\/font> TARGET<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>&amp;<\/font><font COLOR=BLUE SIZE=+1>&amp;<\/font>\r\n       <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>path<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>path_index <font COLOR=BLUE SIZE=+1>-<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>]<\/b><\/font> <font COLOR=BLUE SIZE=+1>=<\/font><font COLOR=BLUE SIZE=+1>=<\/font>  <font COLOR=BROWN>5<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>|<\/font><font COLOR=BLUE SIZE=+1>|<\/font>\r\n        <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>path<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>path_index <font COLOR=BLUE SIZE=+1>-<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>]<\/b><\/font> <font COLOR=BLUE SIZE=+1>=<\/font><font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>10<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>|<\/font><font COLOR=BLUE SIZE=+1>|<\/font>\r\n        <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>path<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>path_index <font COLOR=BLUE SIZE=+1>-<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>]<\/b><\/font> <font COLOR=BLUE SIZE=+1>=<\/font><font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>15<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>|<\/font><font COLOR=BLUE SIZE=+1>|<\/font>\r\n        <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>path<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>path_index <font COLOR=BLUE SIZE=+1>-<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>]<\/b><\/font> <font COLOR=BLUE SIZE=+1>=<\/font><font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>20<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>|<\/font><font COLOR=BLUE SIZE=+1>|<\/font>\r\n        <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>path<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>path_index <font COLOR=BLUE SIZE=+1>-<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>]<\/b><\/font> <font COLOR=BLUE SIZE=+1>=<\/font><font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>25<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>{<\/b><\/font>\r\n        <font COLOR=GREEN><i>\/* valid path found; print the path *\/<\/i><\/font>\r\n        <font COLOR=RED><b>for<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>i <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font> i <font COLOR=BLUE SIZE=+1>&lt;<\/font> path_index<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font> i<font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font>\r\n            printf<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=PURPLE>\" %3d\"<\/font><font COLOR=BLUE SIZE=+1><b>,<\/b><\/font> path<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>i<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n        printf<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=PURPLE>\": sum = %d\\n\"<\/font><font COLOR=BLUE SIZE=+1><b>,<\/b><\/font> sum<font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=BLUE SIZE=+1><b>}<\/b><\/font>\r\n\r\n    <font COLOR=GREEN><i>\/* erase the tracks *\/<\/i><\/font>\r\n    graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>marked <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    path_index<font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    sum <font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BLUE SIZE=+1>=<\/font> graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>value<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n<font COLOR=BLUE SIZE=+1><b>}<\/b><\/font>\r\n\r\n<font COLOR=RED><b>int<\/b><\/font> main<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=RED><b>int<\/b><\/font> argc<font COLOR=BLUE SIZE=+1><b>,<\/b><\/font> <font COLOR=RED><b>char<\/b><\/font> <font COLOR=BLUE SIZE=+1>*<\/font>argv<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font><font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font>\r\n<font COLOR=BLUE SIZE=+1><b>{<\/b><\/font>\r\n    <font COLOR=RED><b>int<\/b><\/font> column<font COLOR=BLUE SIZE=+1><b>,<\/b><\/font> row<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n    <font COLOR=RED><b>int<\/b><\/font> index <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n\r\n    <font COLOR=GREEN><i>\/* set up the graph *\/<\/i><\/font>\r\n    <font COLOR=RED><b>for<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>row <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font> row <font COLOR=BLUE SIZE=+1>&lt;<\/font> DIMENSION<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font> row<font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>{<\/b><\/font>\r\n        <font COLOR=RED><b>for<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>column <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font> column <font COLOR=BLUE SIZE=+1>&lt;<\/font> DIMENSION<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font> column<font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>{<\/b><\/font>\r\n            <font COLOR=RED><b>if<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>row <font COLOR=BLUE SIZE=+1>&gt;<\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font>\r\n                graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>up <font COLOR=BLUE SIZE=+1>=<\/font> index <font COLOR=BLUE SIZE=+1>-<\/font> DIMENSION<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n            <font COLOR=RED><b>else<\/b><\/font>\r\n                graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>up <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n\r\n            <font COLOR=RED><b>if<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>row <font COLOR=BLUE SIZE=+1>&lt;<\/font> DIMENSION <font COLOR=BLUE SIZE=+1>-<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font>\r\n                graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>down <font COLOR=BLUE SIZE=+1>=<\/font> index <font COLOR=BLUE SIZE=+1>+<\/font> DIMENSION<font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n            <font COLOR=RED><b>else<\/b><\/font>\r\n                graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>down <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n\r\n            <font COLOR=RED><b>if<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>column <font COLOR=BLUE SIZE=+1>&gt;<\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font>\r\n                graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>left <font COLOR=BLUE SIZE=+1>=<\/font> index <font COLOR=BLUE SIZE=+1>-<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n            <font COLOR=RED><b>else<\/b><\/font>\r\n                graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>left <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n\r\n            <font COLOR=RED><b>if<\/b><\/font> <font COLOR=BLUE SIZE=+1><b>(<\/b><\/font>column <font COLOR=BLUE SIZE=+1>&lt;<\/font> DIMENSION <font COLOR=BLUE SIZE=+1>-<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font>\r\n                graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>right <font COLOR=BLUE SIZE=+1>=<\/font> index <font COLOR=BLUE SIZE=+1>+<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n            <font COLOR=RED><b>else<\/b><\/font>\r\n                graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>right <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BLUE SIZE=+1>-<\/font><font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n\r\n            graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>value <font COLOR=BLUE SIZE=+1>=<\/font> index <font COLOR=BLUE SIZE=+1>+<\/font> <font COLOR=BROWN>1<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n            graph<font COLOR=BLUE SIZE=+1><b>[<\/b><\/font>index<font COLOR=BLUE SIZE=+1><b>]<\/b><\/font><font COLOR=BLUE SIZE=+1><b>.<\/b><\/font>marked <font COLOR=BLUE SIZE=+1>=<\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n            index<font COLOR=BLUE SIZE=+1><\/font><font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1>+<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n        <font COLOR=BLUE SIZE=+1><b>}<\/b><\/font>\r\n    <font COLOR=BLUE SIZE=+1><b>}<\/b><\/font>\r\n\r\n    move_to_node<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>  <font COLOR=GREEN><i>\/* start from node 1 *\/<\/i><\/font>\r\n    move_to_node<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BROWN>5<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>  <font COLOR=GREEN><i>\/* start from node 6 *\/<\/i><\/font>\r\n    move_to_node<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BROWN>10<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>  <font COLOR=GREEN><i>\/* start from node 11 *\/<\/i><\/font>\r\n    move_to_node<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BROWN>15<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>  <font COLOR=GREEN><i>\/* start from node 16 *\/<\/i><\/font>\r\n    move_to_node<font COLOR=BLUE SIZE=+1><b>(<\/b><\/font><font COLOR=BROWN>20<\/font><font COLOR=BLUE SIZE=+1><b>)<\/b><\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>  <font COLOR=GREEN><i>\/* start from node 21 *\/<\/i><\/font>\r\n\r\n    <font COLOR=RED><b>return<\/b><\/font> <font COLOR=BROWN>0<\/font><font COLOR=BLUE SIZE=+1><b>;<\/b><\/font>\r\n<font COLOR=BLUE SIZE=+1><b>}<\/b><\/font>\r\n<\/pre>\n<p><em>Code colorized by the <a href=\"http:\/\/www.chami.com\/colorizer\/\">CodeColorizer<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Finally, something a bit more complicated&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-211","post","type-post","status-publish","format-standard","hentry","category-pickover-puzzles"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/211","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/comments?post=211"}],"version-history":[{"count":0,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/211\/revisions"}],"wp:attachment":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/media?parent=211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/categories?post=211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/tags?post=211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}