<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
  <channel>
    <title>MaplePrimes - answers and comments on Question, how many routes in a 4x4 square</title>
    <link>http://www.mapleprimes.com/questions/142492-How-Many-Routes-In-A-4x4-Square</link>
    <language>en-us</language>
    <copyright>2026 Maplesoft, A Division of Waterloo Maple Inc.</copyright>
    <generator>Maplesoft Document System</generator>
    <lastBuildDate>Wed, 10 Jun 2026 07:14:16 GMT</lastBuildDate>
    <pubDate>Wed, 10 Jun 2026 07:14:16 GMT</pubDate>
    <itunes:subtitle />
    <itunes:summary />
    <description>The latest answers and comments added to the Question, how many routes in a 4x4 square</description>
    <image>
      <url>http://www.mapleprimes.com/images/mapleprimeswhite.jpg</url>
      <title>MaplePrimes - answers and comments on Question, how many routes in a 4x4 square</title>
      <link>http://www.mapleprimes.com/questions/142492-How-Many-Routes-In-A-4x4-Square</link>
    </image>
    <item>
      <title>Procedure</title>
      <link>http://www.mapleprimes.com/questions/142492-How-Many-Routes-In-A-4x4-Square?ref=Feed:MaplePrimes:how many routes in a 4x4 square:Comments#answer142513</link>
      <itunes:summary>&lt;p&gt;The procedure &lt;strong&gt;Routes&lt;/strong&gt; finds all the routes with a travel length of &lt;strong&gt;n&lt;/strong&gt; in a&lt;strong&gt; N&lt;/strong&gt;x&lt;strong&gt;N&lt;/strong&gt; square and the number of such routes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Routes:=proc(N::posint, n::nonnegint)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;local L, Rule; global T;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if n&amp;gt;=N^2 then T:=[]: print(0);&amp;nbsp;&amp;nbsp; else&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L:=[seq(seq([[i, j]], j=1..N), i=1..N)];&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rule:=proc(K)&amp;nbsp; # Continuation of the route by 1 step&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;local S, k, M, r, p;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[ ]; k:=nops(K[1]);&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;for r in K do&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M:=[ ]:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k]=[1, 1] then for p in [[1, 2], [2, 2], [2, 1]] do&amp;nbsp; # Bottom left corner &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k]=[1, N] then for p in [[1, N-1], [2, N-1], [2, N]] do&amp;nbsp; # Top left corner &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k]=[N, N] then for p in [[N-1, N], [N-1, N-1], [N, N-1]] do&amp;nbsp; # Top right corner &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k]=[N, 1] then for p in [[N-1, 1], [N-1, 2], [N, 2]] do&amp;nbsp; # Bottom right corner &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k,1]=1 and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then for p in [[1, r[k,2]-1], [2, r[k,2]-1], [2, r[k,2]-1], [2, r[k,2]+1], [1, r[k,2]+1]] do&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Left side &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k,2]=N and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then for p in [[r[k,1]-1, N], [r[k,1]-1, N-1], [r[k,1], N-1], [r[k,1]+1, N-1], [r[k,1]+1, N]] do&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top side &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k,1]=N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then for p in [[N, r[k,2]+1], [N-1, r[k,2]+1], [N-1, r[k,2]], [N-1, r[k,2]-1], [N, r[k,2]-1]] do&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# Right side &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k,2]=1 and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then for p in [[r[k,1]-1, 1], [r[k,1]-1, 2], [r[k,1], 2], [r[k,1]+1, 2], [r[k,1]+1, 1]] do&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# Bottom side &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then for p in [[r[k,1]-1, r[k,2]-1], [r[k,1]-1, r[k,2]], [r[k,1]-1, r[k,2]+1], [r[k,1], r[k,2]+1], [r[k,1]+1, r[k,2]+1], [r[k,1]+1, r[k,2]], [r[k,1]+1, r[k,2]-1], [r[k,1], r[k,2]-1]] do&amp;nbsp; # Inside&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;end proc;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T:=(Rule@@n)(L);&amp;nbsp; # List of all the routes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nops(T);&amp;nbsp; # Number of all the routes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;fi;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;end proc;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Routes(4, 6); &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T[10000]; T[20000]; T[60000];&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img src="http://i024.radikal.ru/1301/7a/06b7be13839e.jpg" alt="" width="640" height="148"&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</itunes:summary>
      <description>&lt;p&gt;The procedure &lt;strong&gt;Routes&lt;/strong&gt; finds all the routes with a travel length of &lt;strong&gt;n&lt;/strong&gt; in a&lt;strong&gt; N&lt;/strong&gt;x&lt;strong&gt;N&lt;/strong&gt; square and the number of such routes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Routes:=proc(N::posint, n::nonnegint)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;local L, Rule; global T;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if n&amp;gt;=N^2 then T:=[]: print(0);&amp;nbsp;&amp;nbsp; else&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L:=[seq(seq([[i, j]], j=1..N), i=1..N)];&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rule:=proc(K)&amp;nbsp; # Continuation of the route by 1 step&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;local S, k, M, r, p;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[ ]; k:=nops(K[1]);&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;for r in K do&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M:=[ ]:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k]=[1, 1] then for p in [[1, 2], [2, 2], [2, 1]] do&amp;nbsp; # Bottom left corner &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k]=[1, N] then for p in [[1, N-1], [2, N-1], [2, N]] do&amp;nbsp; # Top left corner &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k]=[N, N] then for p in [[N-1, N], [N-1, N-1], [N, N-1]] do&amp;nbsp; # Top right corner &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k]=[N, 1] then for p in [[N-1, 1], [N-1, 2], [N, 2]] do&amp;nbsp; # Bottom right corner &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k,1]=1 and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then for p in [[1, r[k,2]-1], [2, r[k,2]-1], [2, r[k,2]-1], [2, r[k,2]+1], [1, r[k,2]+1]] do&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Left side &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k,2]=N and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then for p in [[r[k,1]-1, N], [r[k,1]-1, N-1], [r[k,1], N-1], [r[k,1]+1, N-1], [r[k,1]+1, N]] do&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top side &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k,1]=N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then for p in [[N, r[k,2]+1], [N-1, r[k,2]+1], [N-1, r[k,2]], [N-1, r[k,2]-1], [N, r[k,2]-1]] do&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# Right side &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k,2]=1 and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then for p in [[r[k,1]-1, 1], [r[k,1]-1, 2], [r[k,1], 2], [r[k,1]+1, 2], [r[k,1]+1, 1]] do&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# Bottom side &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then for p in [[r[k,1]-1, r[k,2]-1], [r[k,1]-1, r[k,2]], [r[k,1]-1, r[k,2]+1], [r[k,1], r[k,2]+1], [r[k,1]+1, r[k,2]+1], [r[k,1]+1, r[k,2]], [r[k,1]+1, r[k,2]-1], [r[k,1], r[k,2]-1]] do&amp;nbsp; # Inside&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if convert([seq(r[i]&amp;lt;&amp;gt;p, i=1..k-1)], `and`) then M:=[op(M),[op(r), p]]: fi: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S:=[op(S), op(M)]: fi:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;od;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;end proc;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T:=(Rule@@n)(L);&amp;nbsp; # List of all the routes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nops(T);&amp;nbsp; # Number of all the routes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;fi;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;end proc;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Routes(4, 6); &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T[10000]; T[20000]; T[60000];&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img src="http://i024.radikal.ru/1301/7a/06b7be13839e.jpg" alt="" width="640" height="148"&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <guid>142513</guid>
      <pubDate>Tue, 22 Jan 2013 23:56:59 Z</pubDate>
      <itunes:author>Kitonum</itunes:author>
      <author>Kitonum</author>
    </item>
    <item>
      <title>Improved version</title>
      <link>http://www.mapleprimes.com/questions/142492-How-Many-Routes-In-A-4x4-Square?ref=Feed:MaplePrimes:how many routes in a 4x4 square:Comments#answer142654</link>
      <itunes:summary>&lt;p&gt;By avoiding n^2 list building and using a few other refinements, I reduced the run time of Routes from about 20 seconds to 1/2 second. Here is the modified code&lt;/p&gt;
&lt;pre&gt;Routes:=proc(N::posint, n::nonnegint)&lt;br&gt;&lt;br&gt;global T;&lt;br&gt;local i,j,L, Rule;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if n&amp;gt;=N^2 then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T:=[]:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rule := proc(K)&amp;nbsp; # Continuation of the route by 1 step&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; local S, k, r, rk, p, pts, j;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S := table();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j := 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k := nops(K[1]);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for r in K do&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Assign pts the points to consider&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if r[k]=[1, 1] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom left corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, 2], [2, 2], [2, 1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[1, N] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top left corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, N-1], [2, N-1], [2, N]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[N, N] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top right corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N-1, N], [N-1, N-1], [N, N-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[N, 1] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom right corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N-1, 1], [N-1, 2], [N, 2]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]=1 and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Left side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, r[k,2]-1], [2, r[k,2]-1], [2, r[k,2]-1], [2, r[k,2]+1], [1, r[k,2]+1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,2]=N and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, N], [r[k,1]-1, N-1], [r[k,1], N-1], [r[k,1]+1, N-1], [r[k,1]+1, N]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]=N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Right side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N, r[k,2]+1], [N-1, r[k,2]+1], [N-1, r[k,2]], [N-1, r[k,2]-1], [N, r[k,2]-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,2]=1 and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, 1], [r[k,1]-1, 2], [r[k,1], 2], [r[k,1]+1, 2], [r[k,1]+1, 1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Inside&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, r[k,2]-1], [r[k,1]-1, r[k,2]], [r[k,1]-1, r[k,2]+1], [r[k,1], r[k,2]+1], [r[k,1]+1, r[k,2]+1], [r[k,1]+1, r[k,2]], [r[k,1]+1, r[k,2]-1], [r[k,1], r[k,2]-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rk := r[1..k-1];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j := j+1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S[j] := seq(`if`(member(p,rk)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , NULL&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , [op(r),p]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ), p = pts);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; od;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [seq(S[j], j=1..j)];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; L:=[seq(seq([[i, j]], j=1..N), i=1..N)];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T:=(Rule@@n)(L);&amp;nbsp; # List of all the routes&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nops(T);&amp;nbsp; # Number of all the routes&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi;&lt;br&gt;end proc:&lt;/pre&gt;</itunes:summary>
      <description>&lt;p&gt;By avoiding n^2 list building and using a few other refinements, I reduced the run time of Routes from about 20 seconds to 1/2 second. Here is the modified code&lt;/p&gt;
&lt;pre&gt;Routes:=proc(N::posint, n::nonnegint)&lt;br&gt;&lt;br&gt;global T;&lt;br&gt;local i,j,L, Rule;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if n&amp;gt;=N^2 then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T:=[]:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rule := proc(K)&amp;nbsp; # Continuation of the route by 1 step&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; local S, k, r, rk, p, pts, j;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S := table();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j := 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k := nops(K[1]);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for r in K do&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Assign pts the points to consider&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if r[k]=[1, 1] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom left corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, 2], [2, 2], [2, 1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[1, N] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top left corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, N-1], [2, N-1], [2, N]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[N, N] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top right corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N-1, N], [N-1, N-1], [N, N-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[N, 1] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom right corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N-1, 1], [N-1, 2], [N, 2]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]=1 and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Left side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, r[k,2]-1], [2, r[k,2]-1], [2, r[k,2]-1], [2, r[k,2]+1], [1, r[k,2]+1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,2]=N and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, N], [r[k,1]-1, N-1], [r[k,1], N-1], [r[k,1]+1, N-1], [r[k,1]+1, N]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]=N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Right side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N, r[k,2]+1], [N-1, r[k,2]+1], [N-1, r[k,2]], [N-1, r[k,2]-1], [N, r[k,2]-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,2]=1 and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, 1], [r[k,1]-1, 2], [r[k,1], 2], [r[k,1]+1, 2], [r[k,1]+1, 1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Inside&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, r[k,2]-1], [r[k,1]-1, r[k,2]], [r[k,1]-1, r[k,2]+1], [r[k,1], r[k,2]+1], [r[k,1]+1, r[k,2]+1], [r[k,1]+1, r[k,2]], [r[k,1]+1, r[k,2]-1], [r[k,1], r[k,2]-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rk := r[1..k-1];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j := j+1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S[j] := seq(`if`(member(p,rk)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , NULL&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , [op(r),p]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ), p = pts);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; od;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [seq(S[j], j=1..j)];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; L:=[seq(seq([[i, j]], j=1..N), i=1..N)];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T:=(Rule@@n)(L);&amp;nbsp; # List of all the routes&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nops(T);&amp;nbsp; # Number of all the routes&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi;&lt;br&gt;end proc:&lt;/pre&gt;</description>
      <guid>142654</guid>
      <pubDate>Sat, 26 Jan 2013 22:09:39 Z</pubDate>
      <itunes:author>Joe Riel</itunes:author>
      <author>Joe Riel</author>
    </item>
    <item>
      <title>Flaw in Algorithm</title>
      <link>http://www.mapleprimes.com/questions/142492-How-Many-Routes-In-A-4x4-Square?ref=Feed:MaplePrimes:how many routes in a 4x4 square:Comments#answer142678</link>
      <itunes:summary>&lt;p&gt;This algorithm returns duplicates and also misses some paths.&amp;nbsp; To see that execute Routes(4,2) and inspect the first two results (T[1] and T[2]).&amp;nbsp; With duplicates removed, it returns only 82 paths for Route(4,1), the correct answer is easily computed to be 3*4 + 5*8 + 8*4 = 84.&lt;/p&gt;
&lt;p&gt;I believe the correct result, for Routes(4,6), is 68272. I computed that using a simpler approach, an extension to the Iterator package I've recently described.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Addendum&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The original code for Routes give the correct answer for Routes(4,1), 84.&amp;nbsp; It is my modification of it that is flawed for that case. However, the original is incorrect with Routes(4,2), it has the duplicates I've mentioned.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Further Add&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Actually, while the original code does return 84 for Routes(4,1), it returns only 82 unique routes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Correction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The bug is in the points used for the left side; there is a duplicate.&amp;nbsp; With that fixed I get the same results as with the Iterator method. Here is the revised procedure&lt;/p&gt;
&lt;pre&gt;Routes:=proc(N::posint, n::nonnegint)&lt;br&gt;&lt;br&gt;global T;&lt;br&gt;local i,j,L, Rule;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if n&amp;gt;=N^2 then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T:=[]:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rule := proc(K)&amp;nbsp; # Continuation of the route by 1 step&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; local S, k, r, rk, p, pts, j;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S := table();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j := 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k := nops(K[1]);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for r in K do&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Assign pts the points to consider&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if r[k]=[1, 1] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom left corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, 2], [2, 2], [2, 1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[1, N] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top left corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, N-1], [2, N-1], [2, N]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[N, N] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top right corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N-1, N], [N-1, N-1], [N, N-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[N, 1] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom right corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N-1, 1], [N-1, 2], [N, 2]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]=1 and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Left side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, r[k,2]-1], [2, r[k,2]-1], [2, r[k,2]], [2, r[k,2]+1], [1, r[k,2]+1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,2]=N and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, N], [r[k,1]-1, N-1], [r[k,1], N-1], [r[k,1]+1, N-1], [r[k,1]+1, N]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]=N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Right side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N, r[k,2]+1], [N-1, r[k,2]+1], [N-1, r[k,2]], [N-1, r[k,2]-1], [N, r[k,2]-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,2]=1 and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, 1], [r[k,1]-1, 2], [r[k,1], 2], [r[k,1]+1, 2], [r[k,1]+1, 1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Inside&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, r[k,2]-1], [r[k,1]-1, r[k,2]], [r[k,1]-1, r[k,2]+1], [r[k,1], r[k,2]+1], [r[k,1]+1, r[k,2]+1], [r[k,1]+1, r[k,2]], [r[k,1]+1, r[k,2]-1], [r[k,1], r[k,2]-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rk := r[1..k-1];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j := j+1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S[j] := seq(`if`(member(p,rk)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , NULL&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , [op(r),p]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ), p = pts);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; od;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [seq(S[j], j=1..j)];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; L:=[seq(seq([[i, j]], j=1..N), i=1..N)];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T:=(Rule@@n)(L);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nops(T);&amp;nbsp; # Number of all the routes&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi;&lt;br&gt;end proc:&lt;/pre&gt;</itunes:summary>
      <description>&lt;p&gt;This algorithm returns duplicates and also misses some paths.&amp;nbsp; To see that execute Routes(4,2) and inspect the first two results (T[1] and T[2]).&amp;nbsp; With duplicates removed, it returns only 82 paths for Route(4,1), the correct answer is easily computed to be 3*4 + 5*8 + 8*4 = 84.&lt;/p&gt;
&lt;p&gt;I believe the correct result, for Routes(4,6), is 68272. I computed that using a simpler approach, an extension to the Iterator package I've recently described.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Addendum&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The original code for Routes give the correct answer for Routes(4,1), 84.&amp;nbsp; It is my modification of it that is flawed for that case. However, the original is incorrect with Routes(4,2), it has the duplicates I've mentioned.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Further Add&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Actually, while the original code does return 84 for Routes(4,1), it returns only 82 unique routes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Correction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The bug is in the points used for the left side; there is a duplicate.&amp;nbsp; With that fixed I get the same results as with the Iterator method. Here is the revised procedure&lt;/p&gt;
&lt;pre&gt;Routes:=proc(N::posint, n::nonnegint)&lt;br&gt;&lt;br&gt;global T;&lt;br&gt;local i,j,L, Rule;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if n&amp;gt;=N^2 then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T:=[]:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rule := proc(K)&amp;nbsp; # Continuation of the route by 1 step&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; local S, k, r, rk, p, pts, j;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S := table();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j := 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k := nops(K[1]);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for r in K do&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Assign pts the points to consider&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if r[k]=[1, 1] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom left corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, 2], [2, 2], [2, 1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[1, N] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top left corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, N-1], [2, N-1], [2, N]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[N, N] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top right corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N-1, N], [N-1, N-1], [N, N-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k]=[N, 1] then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom right corner&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N-1, 1], [N-1, 2], [N, 2]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]=1 and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Left side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[1, r[k,2]-1], [2, r[k,2]-1], [2, r[k,2]], [2, r[k,2]+1], [1, r[k,2]+1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,2]=N and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Top side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, N], [r[k,1]-1, N-1], [r[k,1], N-1], [r[k,1]+1, N-1], [r[k,1]+1, N]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]=N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Right side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[N, r[k,2]+1], [N-1, r[k,2]+1], [N-1, r[k,2]], [N-1, r[k,2]-1], [N, r[k,2]-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,2]=1 and r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Bottom side&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, 1], [r[k,1]-1, 2], [r[k,1], 2], [r[k,1]+1, 2], [r[k,1]+1, 1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif r[k,1]&amp;lt;&amp;gt;1 and r[k,1]&amp;lt;&amp;gt;N and r[k,2]&amp;lt;&amp;gt;1 and r[k,2]&amp;lt;&amp;gt;N then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Inside&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pts := [[r[k,1]-1, r[k,2]-1], [r[k,1]-1, r[k,2]], [r[k,1]-1, r[k,2]+1], [r[k,1], r[k,2]+1], [r[k,1]+1, r[k,2]+1], [r[k,1]+1, r[k,2]], [r[k,1]+1, r[k,2]-1], [r[k,1], r[k,2]-1]];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rk := r[1..k-1];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j := j+1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S[j] := seq(`if`(member(p,rk)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , NULL&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , [op(r),p]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ), p = pts);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; od;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [seq(S[j], j=1..j)];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; L:=[seq(seq([[i, j]], j=1..N), i=1..N)];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T:=(Rule@@n)(L);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nops(T);&amp;nbsp; # Number of all the routes&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi;&lt;br&gt;end proc:&lt;/pre&gt;</description>
      <guid>142678</guid>
      <pubDate>Sun, 27 Jan 2013 05:54:15 Z</pubDate>
      <itunes:author>Joe Riel</itunes:author>
      <author>Joe Riel</author>
    </item>
    <item>
      <title>Generalization makes this much simpler</title>
      <link>http://www.mapleprimes.com/questions/142492-How-Many-Routes-In-A-4x4-Square?ref=Feed:MaplePrimes:how many routes in a 4x4 square:Comments#answer142762</link>
      <itunes:summary>&lt;p&gt;Sometimes---more often than I would expect---solving a more general problem is easier yet still gives a complete solution to the original problem. Such is the case here. The problem at hand is equivalent to finding all directed paths of a given length in a graph. What you call routes are formally called paths: a sequence of distinct vertices, each adjacent to the preceding.&lt;/p&gt;
&lt;p&gt;Once the data structure is defined as I have done in the procedure below, finding the paths is essentially a one-liner. There's no need to consider special cases like vertices on corners, sides, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AllPaths:= proc(&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; G::GraphTheory:-Graph&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;,maxlength::nonnegint:= GraphTheory:-NumberOfVertices(G)&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;#Returns a table R such that R[k] is a list of all directed paths of length k in G,&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;#where k ranges from 0 to maxlength. G can be directed or undirected.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;#Each path is represented as a list of vertices.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;#The algorithm is breadth-first search.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uses GT= GraphTheory;&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;local&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; k&amp;nbsp; #current length &lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;,p&amp;nbsp; #current path&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;,v&amp;nbsp; #current vertex&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;,V:= GT:-Vertices(G)&amp;nbsp; #constant&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;,E:= table(V =~ (`{}`@op)~ (GT:-Departures(G)))&amp;nbsp; #constant table of edges&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;,R:= table([0= `[]`~ (V)])&amp;nbsp; #Initialize with zero-length paths.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;for k to maxlength do&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #For each path of length k-1, make all possible 1-vx extensions.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;R[k]:= [seq](seq([p[], v], v in E[p[-1]] minus {p[]}), p in R[k-1])&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end do; &lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;eval(R) &lt;/strong&gt;&lt;br&gt;&lt;strong&gt;end proc:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now apply it to the problem at hand:&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;squares:= [seq](seq([i,j], i= 1..4), j= 1..4):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Name the vertices conveniently.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;V:= (v-&amp;gt; cat(['a','b','c','d'][v[1]], v[2]))~ (squares);&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;V := [a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4]&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vsq:= table(V =~ squares):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Define the edges of the graph. Horizontal, vertical, and diagonal adjacency are all covered by simply saying that the infinity norm of the difference of the points is 1.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sq44:= GraphTheory:-Graph(&lt;br&gt;&amp;nbsp;&amp;nbsp; select(e-&amp;gt; LinearAlgebra:-Norm(&amp;lt;Vsq[e[1]] - Vsq[e[2]]&amp;gt;) = 1, combinat:-choose({V[]}, 2))&lt;br&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Generate the paths and time it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CodeTools:-Usage(assign(Pths, AllPaths(Sq44, 6))):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;memory used=11.31MiB, alloc change=4.27MiB, cpu time=219.00ms, real time=210.00ms&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Explore the results a bit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nops(Pths[6]);&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;68272&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Get a well-distributed sample of the paths.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Samp:= [seq](Pths[6][2^k], k= 1..16);&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Samp := [[a1, a2, a3, a4, b3, b2, c1], [a1, a2, a3, a4, b3, b2, c3], [a1, a2, a3, a4, b3, c2, b2], [a1, a2, a3, a4, b3, c3, c2], [a1, a2, a3, a4, b4, c3, c4], [a1, a2, a3, b2, b3, c3, d4], [a1, a2, a3, b2, c3, d3, c4], [a1, a2, a3, b4, c3, b3, c4], [a1, a2, b1, c2, c3, b4, a3], [a1, a2, b3, b4, a3, b2, c2], [a1, b1, c1, c2, d3, c3, b3], [a2, a1, b2, a3, b3, c2, d1], [a2, b3, c3, d2, c1, c2, b2], [a4, b4, c3, c2, b1, c1, b2], [b4, c3, d2, c1, b1, a2, a1], [d4, c3, d2, c2, b3, b4, a3]]&lt;/p&gt;
&lt;p&gt;Develop a few tools for visualizing the paths.&lt;/p&gt;
&lt;p&gt;To center a vertex in its square:&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pt:= v-&amp;gt; Vsq[v] -~ 1/2:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Background to plot on:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;grid:= plot(0, view= [0..4, 0..4], gridlines, scaling= constrained):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pathplot:= p-&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; plots:-display(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,plot(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[pt](p[1]), [pt](p[-1]), pt~(p)]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,style= [point, point, line], color= [green, red, yellow]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,symbol= diamond, symbolsize= 30&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br&gt;&amp;nbsp;&amp;nbsp; )&lt;br&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And finally here are the 16 sample paths:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;plots:-display(Matrix(4,4, pathplot~ (Samp)));&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;(Sorry, I don't know how to upload an array of plots. If you execute the above code yourself, you will get a 4x4 array of plots---one for each of the sample paths.)&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="/view.aspx?sf=142762/452535/PathPlot.gif"&gt;&lt;img src="/view.aspx?sf=142762/452535/PathPlot.gif" alt="" width="281" height="398"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</itunes:summary>
      <description>&lt;p&gt;Sometimes---more often than I would expect---solving a more general problem is easier yet still gives a complete solution to the original problem. Such is the case here. The problem at hand is equivalent to finding all directed paths of a given length in a graph. What you call routes are formally called paths: a sequence of distinct vertices, each adjacent to the preceding.&lt;/p&gt;
&lt;p&gt;Once the data structure is defined as I have done in the procedure below, finding the paths is essentially a one-liner. There's no need to consider special cases like vertices on corners, sides, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AllPaths:= proc(&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; G::GraphTheory:-Graph&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;,maxlength::nonnegint:= GraphTheory:-NumberOfVertices(G)&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;#Returns a table R such that R[k] is a list of all directed paths of length k in G,&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;#where k ranges from 0 to maxlength. G can be directed or undirected.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;#Each path is represented as a list of vertices.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;#The algorithm is breadth-first search.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uses GT= GraphTheory;&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;local&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; k&amp;nbsp; #current length &lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;,p&amp;nbsp; #current path&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;,v&amp;nbsp; #current vertex&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;,V:= GT:-Vertices(G)&amp;nbsp; #constant&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;,E:= table(V =~ (`{}`@op)~ (GT:-Departures(G)))&amp;nbsp; #constant table of edges&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;,R:= table([0= `[]`~ (V)])&amp;nbsp; #Initialize with zero-length paths.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;for k to maxlength do&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #For each path of length k-1, make all possible 1-vx extensions.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;R[k]:= [seq](seq([p[], v], v in E[p[-1]] minus {p[]}), p in R[k-1])&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end do; &lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;eval(R) &lt;/strong&gt;&lt;br&gt;&lt;strong&gt;end proc:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now apply it to the problem at hand:&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;squares:= [seq](seq([i,j], i= 1..4), j= 1..4):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Name the vertices conveniently.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;V:= (v-&amp;gt; cat(['a','b','c','d'][v[1]], v[2]))~ (squares);&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;V := [a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4]&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vsq:= table(V =~ squares):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Define the edges of the graph. Horizontal, vertical, and diagonal adjacency are all covered by simply saying that the infinity norm of the difference of the points is 1.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sq44:= GraphTheory:-Graph(&lt;br&gt;&amp;nbsp;&amp;nbsp; select(e-&amp;gt; LinearAlgebra:-Norm(&amp;lt;Vsq[e[1]] - Vsq[e[2]]&amp;gt;) = 1, combinat:-choose({V[]}, 2))&lt;br&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Generate the paths and time it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CodeTools:-Usage(assign(Pths, AllPaths(Sq44, 6))):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;memory used=11.31MiB, alloc change=4.27MiB, cpu time=219.00ms, real time=210.00ms&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Explore the results a bit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nops(Pths[6]);&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;68272&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Get a well-distributed sample of the paths.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Samp:= [seq](Pths[6][2^k], k= 1..16);&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Samp := [[a1, a2, a3, a4, b3, b2, c1], [a1, a2, a3, a4, b3, b2, c3], [a1, a2, a3, a4, b3, c2, b2], [a1, a2, a3, a4, b3, c3, c2], [a1, a2, a3, a4, b4, c3, c4], [a1, a2, a3, b2, b3, c3, d4], [a1, a2, a3, b2, c3, d3, c4], [a1, a2, a3, b4, c3, b3, c4], [a1, a2, b1, c2, c3, b4, a3], [a1, a2, b3, b4, a3, b2, c2], [a1, b1, c1, c2, d3, c3, b3], [a2, a1, b2, a3, b3, c2, d1], [a2, b3, c3, d2, c1, c2, b2], [a4, b4, c3, c2, b1, c1, b2], [b4, c3, d2, c1, b1, a2, a1], [d4, c3, d2, c2, b3, b4, a3]]&lt;/p&gt;
&lt;p&gt;Develop a few tools for visualizing the paths.&lt;/p&gt;
&lt;p&gt;To center a vertex in its square:&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pt:= v-&amp;gt; Vsq[v] -~ 1/2:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Background to plot on:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;grid:= plot(0, view= [0..4, 0..4], gridlines, scaling= constrained):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pathplot:= p-&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; plots:-display(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,plot(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[pt](p[1]), [pt](p[-1]), pt~(p)]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,style= [point, point, line], color= [green, red, yellow]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,symbol= diamond, symbolsize= 30&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br&gt;&amp;nbsp;&amp;nbsp; )&lt;br&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And finally here are the 16 sample paths:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;plots:-display(Matrix(4,4, pathplot~ (Samp)));&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;(Sorry, I don't know how to upload an array of plots. If you execute the above code yourself, you will get a 4x4 array of plots---one for each of the sample paths.)&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="/view.aspx?sf=142762/452535/PathPlot.gif"&gt;&lt;img src="/view.aspx?sf=142762/452535/PathPlot.gif" alt="" width="281" height="398"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
      <guid>142762</guid>
      <pubDate>Tue, 29 Jan 2013 03:07:57 Z</pubDate>
      <itunes:author>Carl Love</itunes:author>
      <author>Carl Love</author>
    </item>
    <item>
      <title>Vote up</title>
      <link>http://www.mapleprimes.com/questions/142492-How-Many-Routes-In-A-4x4-Square?ref=Feed:MaplePrimes:how many routes in a 4x4 square:Comments#comment142514</link>
      <itunes:summary>&lt;p&gt;However, your comments are not enough detailed.&lt;/p&gt;</itunes:summary>
      <description>&lt;p&gt;However, your comments are not enough detailed.&lt;/p&gt;</description>
      <guid>142514</guid>
      <pubDate>Wed, 23 Jan 2013 00:26:06 Z</pubDate>
      <itunes:author>Markiyan Hirnyk</itunes:author>
      <author>Markiyan Hirnyk</author>
    </item>
    <item>
      <title>More comments</title>
      <link>http://www.mapleprimes.com/questions/142492-How-Many-Routes-In-A-4x4-Square?ref=Feed:MaplePrimes:how many routes in a 4x4 square:Comments#comment142517</link>
      <itunes:summary>&lt;p&gt;&lt;a href="http://www.mapleprimes.com/questions/142492-How-Many-Routes-In-A-4x4-Square#comment142514"&gt;@Markiyan Hirnyk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The subprocedure &amp;nbsp;&lt;strong&gt;Rule&amp;nbsp;&lt;/strong&gt; is of fundamental importance in procedure&amp;nbsp;&lt;strong&gt; Routes&lt;/strong&gt;. It allows you to extend the already created list of routes&amp;nbsp;&lt;strong&gt;&amp;nbsp;K&lt;/strong&gt;&amp;nbsp; &amp;nbsp;one more step. Applying &amp;nbsp;&lt;strong&gt;Rule&amp;nbsp;&lt;/strong&gt; to the list of all the vertices&amp;nbsp;&lt;strong&gt; L&amp;nbsp;&lt;/strong&gt;, we get a list of all routes of length 1. Applying the procedure &amp;nbsp;&lt;strong&gt;Rule&lt;/strong&gt;&amp;nbsp; to the previous list, we get all routes of length 2, and so on.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</itunes:summary>
      <description>&lt;p&gt;&lt;a href="http://www.mapleprimes.com/questions/142492-How-Many-Routes-In-A-4x4-Square#comment142514"&gt;@Markiyan Hirnyk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The subprocedure &amp;nbsp;&lt;strong&gt;Rule&amp;nbsp;&lt;/strong&gt; is of fundamental importance in procedure&amp;nbsp;&lt;strong&gt; Routes&lt;/strong&gt;. It allows you to extend the already created list of routes&amp;nbsp;&lt;strong&gt;&amp;nbsp;K&lt;/strong&gt;&amp;nbsp; &amp;nbsp;one more step. Applying &amp;nbsp;&lt;strong&gt;Rule&amp;nbsp;&lt;/strong&gt; to the list of all the vertices&amp;nbsp;&lt;strong&gt; L&amp;nbsp;&lt;/strong&gt;, we get a list of all routes of length 1. Applying the procedure &amp;nbsp;&lt;strong&gt;Rule&lt;/strong&gt;&amp;nbsp; to the previous list, we get all routes of length 2, and so on.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <guid>142517</guid>
      <pubDate>Wed, 23 Jan 2013 01:11:05 Z</pubDate>
      <itunes:author>Kitonum</itunes:author>
      <author>Kitonum</author>
    </item>
  </channel>
</rss>