Показать сообщение отдельно
  #11 (permalink)  
Старый 29.01.2013, 23:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Сообщение от Владимир Фомин
Программа, которая выводит пути обхода конём всех клеток шахматной доски по одному разу.
Попробовал сделать подобное ))) размеры поля можно менять задавая массивы HH и WW.Ваш вариант не смотрел до этого. ...
<!DOCTYPE HTML>
<html>
<head>
<meta charset="windows-1251" />
<style type="text/css">
td{
   height: 22px; width: 22px; text-align: center;
   border: solid #FFCC66 2px;
   color: #3333FF;

}
</style>
  <title></title>
</head>
<body>
<script type="text/javascript">
var WW = [1,2,3,4,5],
HH = ['a','b','c','d','e'],
w = [2, 1, -1, -2, -2, -1, 1, 2],
h = [-1, -2, -2, -1, 1, 2, 2, 1];
function   Horse(e, f) {
    for (var d = [], a = 0; a < w.length; a++) {
        var b = e + h[a],
            c = f + w[a];
             - 1 < c && (HH.length > c && -1 < b && WW.length > b) && d.push(HH[b] + WW[c])
    }
    return d
}
var obj = {};
var step = {};
var t = document.createElement("table")
for (var i=0; i< HH.length; i++)  {
var tr = t.insertRow(i)
for (var k=0; k< WW.length; k++)  {
var td = tr.insertCell(k)
td.innerHTML = HH[i]+WW[k]
td.onclick = function (a)
{
  return function() { Up(a) }
}(HH[i]+WW[k])
obj[HH[i]+WW[k]]= Horse(i,k)
}}
document.body.appendChild(t);
function Unique(a, c) {
    for (var b = 0; b < c.length; b++) if (a == c[b] || !a) return !1;
    return !0
}
function Tree (a) {
    for (var c = [], b = obj[a[a.length - 1]], d = 0; d < b.length; d++)
    Unique(b[d], a) && c.push(a.concat(b[d]));
    return c
};
function Chess(num) {
   if (step[num]) return step[num];
   var a = Tree([num]);
    for (var b = 0; b < a.length; b++) {
        for (; a[b] && WW.length * HH.length > a[b].length;) {
            var c = Tree(a[b]);
            a = a.slice(0, b).concat(c).concat(a.slice(b + 1))
        }
        if (0 == a.length) {step[num]=[];return []}
    }

    step[num] = a
    return a
};
 function Up(num)
 {
    var d = document.getElementById('show');
    d.innerHTML="Считаю, наберитесь терпения пожалуйста";
    var test = Chess(num);
    d.innerHTML= "Для "+ num + " : "+ test.length+" вариантов<br />"+test.join("<br />")
 }
</script>
<div id="show"></div>
</body>
</html>
Ответить с цитированием