Цитата:
<!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> |
Владимир Фомин
Добро пожаловать :) Не так часто нас посещают столь легендарные личности. |
Цитата:
Могу показать более читабельный код такой программы, выполняющей вывод всех ходов с 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> |
Цитата:
Почему же однобокое мировоззрение? В чём именно я не прав? |
Владимир Фомин,
на всякий случай http://ateist.spb.ru/javascript/knight.htm немного перепутано нажмите d2 и посмотрите результат function begining(vertical, horizontal) можно исправить поменяв тут местами vertical, horizontal. Моя програма просто как вариант решения. |
Цитата:
|
Цитата:
Так будет читабельней и быстрее: var n = 5, u,str, x = [], y = [], s = [], r = [], b = ["0", "a", "b", "c", "d", "e"], dx = [0, 1, 2, 2, 1, -1, -2, -2, -1, 0], dy = [0, 2, 1, -1, -2, -2, -1, 1, 2, 0]; |
Вот так понятнее, с циклом 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"> <input name="button" value="e2" onclick="begining(2,5)" type="button"> <input name="button" value="e3" onclick="begining(3,5)" type="button"> <input name="button" value="e4" onclick="begining(4,5)" type="button"> <input name="button" value="e5" onclick="begining(5,5)" type="button"> <br><br> <input name="button" value="d1" onclick="begining(1,4)" type="button"> <input name="button" value="d2" onclick="begining(2,4)" type="button"> <input name="button" value="d3" onclick="begining(3,4)" type="button"> <input name="button" value="d4" onclick="begining(4,4)" type="button"> <input name="button" value="d5" onclick="begining(5,4)" type="button"> <br><br> <input name="button" value="c1" onclick="begining(1,3)" type="button"> <input name="button" value="c2" onclick="begining(2,3)" type="button"> <input name="button" value="c3" onclick="begining(3,3)" type="button"> <input name="button" value="c4" onclick="begining(4,3)" type="button"> <input name="button" value="c5" onclick="begining(5,3)" type="button"> <br><br> <input name="button" value="b1" onclick="begining(1,2)" type="button"> <input name="button" value="b2" onclick="begining(2,2)" type="button"> <input name="button" value="b3" onclick="begining(3,2)" type="button"> <input name="button" value="b4" onclick="begining(4,2)" type="button"> <input name="button" value="b5" onclick="begining(5,2)" type="button"> <br><br> <input name="button" value="a1" onclick="begining(1,1)" type="button"> <input name="button" value="a2" onclick="begining(2,1)" type="button"> <input name="button" value="a3" onclick="begining(3,1)" type="button"> <input name="button" value="a4" onclick="begining(4,1)" type="button"> <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; } |
Цитата:
|
Цитата:
Кстати, есть ещё два вопроса. Не подскажете ли проигрыватель, который воспроизводит не только mp3, а и midi? Видите, то аудио mp3 http://ateist.spb.ru/aboutme.htm воспроизводится при открытии этой страницы, но файлы с расширением mid не воспроизводятся. Как вставить на страницу сайта потоковое радио с адресом http://212.124.29.69 ? Есть такой способ. <embed type="application/x-mplayer2" name="MediaPlayer0" src="http://212.124.29.69/" autostart="1" animationatstart="0" showcontrols="1" showaudiocontrols="1" showpositioncontrols="0" autosize="0" showstatusbar="1" displaysize="0" transparentatstart="1" width="300" height="70"> Но 1) этот код невалидный; 2) радио воспроизводится только в Internet Explorer и не воспроизводится в других браузерах. |
Часовой пояс GMT +3, время: 01:27. |