Показать сообщение отдельно
  #13 (permalink)  
Старый 30.01.2013, 12:33
Интересующийся
Отправить личное сообщение для Владимир Фомин Посмотреть профиль Найти все сообщения от Владимир Фомин
 
Регистрация: 21.01.2013
Сообщений: 16

Сообщение от рони Посмотреть сообщение
Попробовал сделать подобное ))) размеры поля можно менять задавая массивы HH и WW.Ваш вариант не смотрел до этого. ... :
Почему то ваша программа работает намного медленнее моей. Я ждал, что она выведет, например, 304 цветные картинки.
Могу показать более читабельный код такой программы, выполняющей вывод всех ходов с a1. Вместо массива клеток p[k] в ней определяются два массива положения по горизонтали и по вертикали на каждом шаге
x[k], y[k], 1<=k<=25; 0<=x[k]<=5; 0<=y[k]<=5;
Посмотрите, насколько быстрее работает.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="windows-1251" />
<script type="text/javascript">
var n = 5;
var x = new Array();   //номер вертикали на k-м шаге, 1<=k<=n*n, 1<=x[k]<=n 
var y = new Array();    //номер горизонтали на k-м шаге, 1<=k<=n*n, 1<=y[k]<=n 
var b = new Array("0", "a", "b", "c", "d", "e");
var r = new Array();
var u;
var dx = new Array(0,  1,  2,  2,  1, -1, -2, -2, -1,  0);
var dy = new Array(0,  2,  1, -1, -2, -2, -1,  1,  2,  0);
var s = new Array();
var str;

begining(1, 1);

function begining(vertical, horizontal)
{
  u = 0; 
  x[1]=vertical; 
  y[1]=horizontal;
  s[1]=0;
  for (var i = 1; i<=n*n; i++) r[i]=false;
  r[x[1]+n*y[1]-n] = true;
  str="";
  chessknight(1);
  str=str+ "<br><br>Найдено "+u+" решений с a1";
  document.write(str);
}

function chessknight(k)
{
  if (k==n*n) 
  {
    u++;
    printing(u);
  }
  s[k]=0;
   while(s[k]<8)
   {
      s[k]=s[k]+1;
      if ((r[x[k]+dx[s[k]]+n*(y[k]+dy[s[k]])-n]==false) 
          && (x[k]+dx[s[k]]>=1) && (x[k]+dx[s[k]]<=n) 
          && (y[k]+dy[s[k]]>=1) && (y[k]+dy[s[k]]<=n))
      {
         r[x[k]+dx[s[k]]+n*(y[k]+dy[s[k]])-n] = true;  
         x[k+1] = x[k]+dx[s[k]];  
         y[k+1] = y[k]+dy[s[k]];
         chessknight(k+1);
      }
   }
   r[x[k]+n*y[k]-n] = false;
   x[k] = 0;
   y[k] = 0;
   s[k] = 0;
}

function printing(u)
{
  for (var i=1; i<=n*n; i++) str=str+b[x[i]]+y[i]+" ";
  str = str+" = решение "+u+"<br>"; 
}

</script>

</body>
</html>
Ответить с цитированием