{"id":758,"date":"2011-04-22T22:03:02","date_gmt":"2011-04-22T14:03:02","guid":{"rendered":"http:\/\/www.kumouse.com\/?p=758"},"modified":"2011-04-22T22:03:02","modified_gmt":"2011-04-22T14:03:02","slug":"maze-%e5%9b%9e%e6%ba%af%e6%b3%95%e8%a7%a3%e5%86%b3%e8%bf%b7%e5%ae%ab","status":"publish","type":"post","link":"https:\/\/www.kumouse.com\/?p=758","title":{"rendered":"maze &#8211; \u56de\u6eaf\u6cd5\u89e3\u51b3\u8ff7\u5bab"},"content":{"rendered":"<p>#include &lt;stdio.h&gt;<\/p>\n<p>\tstruct point {<br \/>\n\t&nbsp;&nbsp;&nbsp; int row;<br \/>\n\t&nbsp;&nbsp;&nbsp; int col;<br \/>\n\t};<\/p>\n<p>\t\/* define point stack *\/<br \/>\n\tstruct point stack[512];<\/p>\n<p>\t\/* define stack pointer *\/<br \/>\n\tint top = 0;<\/p>\n<p>\t\/* define push() *\/<br \/>\n\tvoid push(struct point node)<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; stack[top++] = node;<br \/>\n\t&nbsp;&nbsp;&nbsp; return;<br \/>\n\t}<\/p>\n<p>\t\/* define pop() *\/<br \/>\n\tstruct point pop(void)<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; return stack[&#8211;top]; <br \/>\n\t}<\/p>\n<p>\t\/* define isempty() *\/<br \/>\n\tint isempty(void)<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; return (top == 0);<br \/>\n\t}<\/p>\n<p>\tint maze[5][5] =<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; { 0, 0, 0, 0, 0 },<br \/>\n\t&nbsp;&nbsp;&nbsp; { 1, 1, 1, 1, 0 },<br \/>\n\t&nbsp;&nbsp;&nbsp; { 0, 0, 0, 1, 0 },<br \/>\n\t&nbsp;&nbsp;&nbsp; { 0, 0, 0, 1, 0 },<br \/>\n\t&nbsp;&nbsp;&nbsp; { 0, 0, 0, 1, 0 }<br \/>\n\t};<\/p>\n<p>\tstruct point father[5][5] =<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1} }, <br \/>\n\t&nbsp;&nbsp;&nbsp; {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1} }, <br \/>\n\t&nbsp;&nbsp;&nbsp; {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1} }, <br \/>\n\t&nbsp;&nbsp;&nbsp; {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1} }, <br \/>\n\t&nbsp;&nbsp;&nbsp; {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1} }, <br \/>\n\t};<\/p>\n<p>\tvoid print_stack(void)<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; int i;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; for (i = top-1; i &gt;= 0; i&#8211;)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;(%d, %d) n&quot;, stack[i].row, stack[i].col);<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; printf(&quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;n&quot;);<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; return;<br \/>\n\t}<\/p>\n<p>\tvoid print_maze(void)<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; int i, j;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; 5; i++)<br \/>\n\t&nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (j = 0; j &lt; 5; j++)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;%d &quot;, maze[i][j]);<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;n&quot;);<br \/>\n\t&nbsp;&nbsp;&nbsp; }<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; printf(&quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;n&quot;);<br \/>\n\t&nbsp;&nbsp;&nbsp; return;<br \/>\n\t}<\/p>\n<p>\tvoid print_father(void)<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; int i, j;<br \/>\n\t&nbsp;&nbsp;&nbsp; struct point node;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; 5; i++)<br \/>\n\t&nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (j = 0; j &lt; 5; j++)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node = father[i][j];<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;(%2d,%2d) &quot;, node.row, node.col);<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;n&quot;);<br \/>\n\t&nbsp;&nbsp;&nbsp; }<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; printf(&quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;n&quot;);<br \/>\n\t&nbsp;&nbsp;&nbsp; return;<br \/>\n\t}<\/p>\n<p>\tstruct point entry = {0, 0};<br \/>\n\tstruct point out = {4, 4};<\/p>\n<p>\tvoid backtrack(struct point p)<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; \/* define tmp node = curr point *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; struct point node = p;<br \/>\n\t&nbsp;&nbsp;&nbsp; struct point null = {-1, -1};<br \/>\n\t&nbsp;&nbsp;&nbsp; struct point top, topfather;<br \/>\n\t&nbsp;&nbsp;&nbsp; int row, col;<\/p>\n<p>\t#ifdef DEBUG<br \/>\n\t&nbsp;&nbsp;&nbsp; printf(&quot;backtrack is begin n&quot;);<br \/>\n\t&nbsp;&nbsp;&nbsp; print_stack();<br \/>\n\t&nbsp;&nbsp;&nbsp; getchar();<br \/>\n\t#endif<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; \/* peak stack top *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; top = pop();<br \/>\n\t&nbsp;&nbsp;&nbsp; push(top);<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; \/* get top father *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; topfather = father[top.row][top.col];<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; while(1)<br \/>\n\t&nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* get curr node&#39;s row &amp; col *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; row = node.row;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; col = node.col;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* clear maze[][] = 0 *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maze[row][col] = 0;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* get current node&#39;s father *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node = father[row][col];<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* clear father[][] = (-1,-1) *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; father[row][col] = null;<br \/>\n\t#ifdef DEBUG<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print_maze();<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print_father();<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; getchar();<br \/>\n\t#endif<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* end condition *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* peak stack top point -&gt; topfather *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* if node == topfather, break *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (node.row == topfather.row &amp;&amp; node.col == topfather.col)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br \/>\n\t&nbsp;&nbsp;&nbsp; }<\/p>\n<p>\t\/\/&nbsp;&nbsp;&nbsp; printf(&quot;backtrack is over n&quot;);<br \/>\n\t}<\/p>\n<p>\tvoid print_solution(void)<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; \/* define tmp node = exit point *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; struct point node = out;<br \/>\n\t&nbsp;&nbsp;&nbsp; int row, col;<br \/>\n\t&nbsp;&nbsp;&nbsp; static int counter = 0;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; while(1)<br \/>\n\t&nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* print curr node *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;(%d, %d) &lt;- &quot;, node.row, node.col);<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; row = node.row;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; col = node.col;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* get current node&#39;s father *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node = father[row][col];<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* if current node is (-1,-1), then break *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (node.row == -1)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br \/>\n\t&nbsp;&nbsp;&nbsp; }<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; printf(&quot;n&quot;);&nbsp;&nbsp;&nbsp; <br \/>\n\t&nbsp;&nbsp;&nbsp; printf(&quot;%d solution is over n&quot;, ++counter);&nbsp;&nbsp;&nbsp; <\/p>\n<p>\t&nbsp;&nbsp;&nbsp; return;<br \/>\n\t}<\/p>\n<p>\tint main(void)<br \/>\n\t{<br \/>\n\t&nbsp;&nbsp;&nbsp; \/\/struct point entry = {2, 2};<br \/>\n\t&nbsp;&nbsp;&nbsp; struct point curr;<br \/>\n\t&nbsp;&nbsp;&nbsp; struct point node;<br \/>\n\t&nbsp;&nbsp;&nbsp; int flag = 0;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; printf(&quot;hello, mazer!n&quot;);<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; \/* init stack, push entry point *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; push(entry);<\/p>\n<p>\t#ifdef DEBUG<br \/>\n\t&nbsp;&nbsp;&nbsp; print_stack();<br \/>\n\t&nbsp;&nbsp;&nbsp; print_maze();&nbsp;&nbsp;&nbsp; <br \/>\n\t&nbsp;&nbsp;&nbsp; print_father();&nbsp;&nbsp;&nbsp; <br \/>\n\t#endif<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; while (!isempty())<br \/>\n\t&nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* get the stack top *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; curr = pop();<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* flag curr point *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maze[curr.row][curr.col] = 2;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* check it *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; \/\/&nbsp;&nbsp;&nbsp; print_stack();<br \/>\n\t&nbsp;&nbsp;&nbsp; \/\/&nbsp;&nbsp;&nbsp; print_maze();<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* judgement if curr is exit point *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (curr.row == out.row &amp;&amp; curr.col == out.col)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;one solution found! n&quot;);<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print_solution();<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* begin to backtrack *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; backtrack(curr);<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/\/&nbsp;&nbsp;&nbsp; break;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; continue;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* expand from curr *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; flag = 0;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* look left *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (curr.col-1 &gt;= 0 &amp;&amp; maze[curr.row][curr.col-1] == 0)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* push left point *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node.row = curr.row;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node.col = curr.col &#8211; 1;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* node &#39;s father is null *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (father[node.row][node.col].row == -1)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; push(node);<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* remember father *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; father[node.row][node.col] = curr;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; flag++;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* look up *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (curr.row-1 &gt;= 0 &amp;&amp; maze[curr.row-1][curr.col] == 0)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* push up point *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node.row = curr.row &#8211; 1;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node.col = curr.col;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (father[node.row][node.col].row == -1)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; push(node);<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* remember father *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; father[node.row][node.col] = curr;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; flag++;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* look right *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (curr.col+1 &lt; 5 &amp;&amp; maze[curr.row][curr.col+1] == 0)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* push right point *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node.row = curr.row;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node.col = curr.col + 1;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (father[node.row][node.col].row == -1)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; push(node);<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* remember father *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; father[node.row][node.col] = curr;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; flag++;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* look down *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (curr.row+1 &lt; 5 &amp;&amp; maze[curr.row+1][curr.col] == 0)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* push down point *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node.row = curr.row + 1;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; node.col = curr.col;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (father[node.row][node.col].row == -1)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; push(node);<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* remember father *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; father[node.row][node.col] = curr;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; flag++;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br \/>\n\t#ifdef DEBUG<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print_stack();<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print_father();<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; getchar();<br \/>\n\t#endif<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/* if no way out (curr node has no expand node) *\/<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (flag == 0)<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; backtrack(curr);<br \/>\n\t&nbsp;&nbsp;&nbsp; }<\/p>\n<p>\t&nbsp;&nbsp;&nbsp; printf(&quot;maze is over n&quot;);<br \/>\n\t\/\/&nbsp;&nbsp;&nbsp; print_stack();<br \/>\n\t&nbsp;&nbsp;&nbsp; <br \/>\n\t&nbsp;&nbsp;&nbsp; return 0;<br \/>\n\t}<br \/>\n\t&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>#include &lt;stdio.h&gt; struct point { &nbsp;&nbsp;&#038;nb [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-758","post","type-post","status-publish","format-standard","hentry","category-linux-c"],"_links":{"self":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/posts\/758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=758"}],"version-history":[{"count":0,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/posts\/758\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}