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

Вот так понятнее, с циклом for. Да?


<html>
<head>                                                                     
<title>Программа, которая выводит пути обхода конём всех клеток шахматной доски по одному разу.</title>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
</head>
<body>
<h3 align="center">Программа, которая выводит пути обхода конём всех клеток шахматной доски по одному разу.</h3>

<div align="center">
<form  id="knight5" action="" method = "get">
<input name="button" value="e1" onclick="begining(1,5)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="e2" onclick="begining(2,5)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="e3" onclick="begining(3,5)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="e4" onclick="begining(4,5)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="e5" onclick="begining(5,5)" type="button">
<br><br>
<input name="button" value="d1" onclick="begining(1,4)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="d2" onclick="begining(2,4)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="d3" onclick="begining(3,4)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="d4" onclick="begining(4,4)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="d5" onclick="begining(5,4)" type="button">
<br><br>
<input name="button" value="c1" onclick="begining(1,3)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="c2" onclick="begining(2,3)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="c3" onclick="begining(3,3)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="c4" onclick="begining(4,3)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="c5" onclick="begining(5,3)" type="button">
<br><br>
<input name="button" value="b1" onclick="begining(1,2)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="b2" onclick="begining(2,2)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="b3" onclick="begining(3,2)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="b4" onclick="begining(4,2)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="b5" onclick="begining(5,2)" type="button">
<br><br>
<input name="button" value="a1" onclick="begining(1,1)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="a2" onclick="begining(2,1)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="a3" onclick="begining(3,1)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="a4" onclick="begining(4,1)" type="button">&nbsp;&nbsp;&nbsp;&nbsp;
<input name="button" value="a5" onclick="begining(5,1)" type="button">
</form>
</div>                       
<div id="REZ"></div> 

<script type="text/javascript">

var n = 5;
var x = [];   //номер горизонтали на k-м шаге, 1<=k<=n*n, 1<=x[k]<=n 
var y = [];    //номер горизонтали на k-м шаге, 1<=k<=n*n, 1<=y[k]<=n 
var b = [null, "a", "b", "c", "d", "e"];
var r = [];
var u;
var dx = [null,  1,  2,  2,  1, -1, -2, -2, -1];
var dy = [null,  2,  1, -1, -2, -2, -1,  1,  2];
var solution;

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

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

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

</script>

</body>
</html>


А почему в браузере Mozilla Firefox быстро работает, а в Internet Explorer 8 - намного медленнее. Ничего нельзя сделать, чтобы и в Internet Explorer так же быстро работало?

Код скрпита с подсветкой синтакисиса

var n = 5;
var x = [];   //номер горизонтали на k-м шаге, 1<=k<=n*n, 1<=x[k]<=n 
var y = [];    //номер горизонтали на k-м шаге, 1<=k<=n*n, 1<=y[k]<=n 
var b = [null, "a", "b", "c", "d", "e"];
var r = [];
var u;
var dx = [null,  1,  2,  2,  1, -1, -2, -2, -1];
var dy = [null,  2,  1, -1, -2, -2, -1,  1,  2];
var solution;

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

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

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

Последний раз редактировалось Владимир Фомин, 30.01.2013 в 16:16.
Ответить с цитированием