<!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> </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>