递归:: 迷宫问题

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “
http://www.w3.org/TR/html4/strict.dtd“>

<html>

    <head>

        <meta http-equiv=”Content-Type” content=”text/html; charset=gbk”/>

        <title>Untitled Document</title>

    </head>

    <body>

        <p>

            迷宫问题

        </p>

        <p>

            如下图为一迷宫,假设该表格外面还有一层墙壁(不用判断是否出界),即为(row+2,column+2)的表格,

            其中红色不可通行(状态为1),白色为可通行路径(状态为0),入口为左上的顶点(1,1),

            出口为右下顶点(row,column),这只老鼠要从入口走到出口,路径为绿色。

        </p>

        <p>

            递归算法如下:假设这只老鼠现在在任何一个位置(i,j),它有上下左右四个方面可走,

            如果为红色或碰到墙壁,如该方向不可行,如果可行(状态改为2)并且是出口的话,就打印出结果

        </p>

        <p>

            <input type=”button” id=”btnFind” name=”btnFind” value=”显示路径”/>

        </p>

        <script type=”text/javascript”>

            function createTable(tblId){

                var html = “<table id='” + tblId + “‘ border=’1’>”;

                for (var i = 0; i < 5; i++) {

                    html += “<tr>”;

                    for (var j = 0; j < 5; j++) {

                        if (i == 0 && j == 0) {

                            html += “<td>^0^</td>”;

                        }

                        else {

                            html += “<td>&nbsp;</td>”;

                        }

                    }

                    html += “</tr>”;

                }

                html += “</table>”;

                document.writeln(html);

            }

           

            function findpath(mazing, direct, row, column){

                var MaxRow = mazing.length – 2;

                var MaxColumn = mazing[0].length – 2;

                for (var i = 0, cnt = direct.length; i < cnt; i++) {

                    var nextrow = row + direct[i][0];

                    var nextcolumn = column + direct[i][1];

                    if (mazing[nextrow][nextcolumn] == 0) {

                        mazing[nextrow][nextcolumn] = 2; //标记为已走过,不可以再走

                        if (nextrow == MaxRow && nextcolumn == MaxColumn) {

                            showpath(mazing, “tbl2”);

                        }

                        else {

                            findpath(mazing, direct, nextrow, nextcolumn)

                        }

                        mazing[nextrow][nextcolumn] = 0; // 查询结束,表明该路径不成功,则恢复所有原先的标志。

                    }

                }

            }

           

            function showpath(mazing, tblId){

                var objTable = document.getElementById(tblId)

                var tbody = objTable.tBodies[0];

                var MaxRow = mazing.length – 1;

                var MaxColumn = mazing[0].length – 1;

                for (var i = 1; i < MaxRow; i++) {

                    var row = tbody.rows[i – 1];

                    for (var j = 1; j < MaxColumn; j++) {

                        var column = row.cells[j – 1];

                        var state = mazing[i][j];

                        column.style.backgroundColor = (state == 2 ? “#00ff00” : (state == 1 ? “#ff0000” : “#ffffff”));

                    }

                }

            }

           

            //分别是迷宫的数据(包括墙壁),及四个方向的(X,Y)值

            var mazing = [], direct = [], i = 0, j = 0;

            mazing[i++] = [1, 1, 1, 1, 1, 1, 1];

            mazing[i++] = [1, 0, 1, 0, 0, 0, 1];

            mazing[i++] = [1, 0, 1, 0, 1, 0, 1];

            mazing[i++] = [1, 0, 0, 0, 1, 0, 1];

            mazing[i++] = [1, 0, 1, 0, 1, 0, 1];

            mazing[i++] = [1, 0, 1, 0, 1, 0, 1];

            mazing[i++] = [1, 1, 1, 1, 1, 1, 1];

            direct[j++] = [1, 0];

            direct[j++] = [0, 1];

            direct[j++] = [-1, 0];

            direct[j++] = [0, -1];

           

           

            createTable(“tbl2”);

            showpath(mazing, “tbl2”);

            var btnFind = document.getElementById(“btnFind”);

            btnFind.onclick = function(){

                findpath(mazing, direct, 1, 1)

            };

        </script>

    </body>

</html>

 

    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/beimuaihui/article/details/2111933
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞