एचटीएमएलजावास्क्रिप्ट भूलभुलैया सॉल्वर एल्गोरिथ्म
<div id="labirinth">
<form style="text-align:center" name="forma1" autocomplete="on">
<table style="margin:0 auto;">
<tr>
<td style="float:right;">Height:</td>
<td><input type="text" id="height" name="height" autofocus="autofocus" maxlength="2" size="6" /></td>
</tr>
<tr>
<td style="float:right;">Width:</td>
<td><input type="text" id="width" name="width" maxlength="2" size="6" /></td>
</tr>
</table>
</form>
<input type="button" alt="submit" onClick="datas();" value="New" style="margin-top:10px;" />
</div>
<pre id="out"></pre>
जावास्क्रिप्ट
function datas() {
var height = parseInt(document.getElementById("height").value);
var width = parseInt(document.getElementById("width").value);
document.getElementById('out').innerHTML = display(maze(height,width));
}
function maze(x,y) {
var n=x*y-1;
if (n<0) {alert("Bad numbers!");return;}
var horiz=[];
for (var j= 0; j<x+1; j++) horiz[j]= [];
var verti=[];
for (var j= 0; j<y+1; j++) verti[j]= [];
var here= [Math.floor(Math.random()*x), Math.floor(Math.random()*y)];
var path= [here];
var unvisited= [];
for (var j= 0; j<x+2; j++) {
unvisited[j]= [];
for (var k= 0; k<y+1; k++)
unvisited[j].push(j>0 && j<x+1 && k>0 && (j != here[0]+1 || k != here[1]+1));
}
while (0<n) {
var potential= [[here[0]+1, here[1]], [here[0],here[1]+1],
[here[0]-1, here[1]], [here[0],here[1]-1]];
var neighbors= [];
for (var j= 0; j < 4; j++)
if (unvisited[potential[j][0]+1][potential[j][1]+1])
neighbors.push(potential[j]);
if (neighbors.length) {
n= n-1;
next= neighbors[Math.floor(Math.random()*neighbors.length)];
unvisited[next[0]+1][next[1]+1]= false;
if (next[0] == here[0])
horiz[next[0]][(next[1]+here[1]-1)/2]= true;
else
verti[(next[0]+here[0]-1)/2][next[1]]= true;
path.push(here= next);
} else
here= path.pop();
}
return ({x: x, y: y, horiz: horiz, verti: verti});
}
function display(m) {
var text= [];
for (var j= 0; j<m.x*2+1; j++) {
var line= [];
if (0 == j%2)
for (var k=0; k<m.y*4+1; k++)
if (0 == k%4)
line[k]= 'X';
else
if (j>0 && m.verti[j/2-1][Math.floor(k/4)])
line[k]= ' ';
else
line[k]= 'X';
else
for (var k=0; k<m.y*4+1; k++)
if (0 == k%4)
if (k>0 && m.horiz[(j-1)/2][k/4-1])
line[k]= ' ';
else
line[k]= 'X';
else
line[k]= ' ';
if (0 == j) line[1]=line[3]=' ',line[2]= '1';
if (m.x*2-1 == j) line[4*m.y]= '2';
text.push(line.join('')+'\r\n');
}
return text.join('');
}
मैं HTML तालिका कोशिकाओं का उपयोग किए बिना जावास्क्रिप्ट में पूरी तरह से काम कर रहा भूलभुलैया जनरेटर बनाने के लिए कोशिश कर रहा हूँ। अब मुझे इस भूलभुलैया के लिए सृजन सॉल्वर के साथ समस्याएं हैं।
प्रश्न: मुझे अपने कोड के लिए उपयोग करने के लिए किस भूलभुलैया एल्गोरिदम की आवश्यकता है? मुझे किसके साथ शुरू करना चाहिए? मुझे पूरे एल्गोरिदम की आवश्यकता नहीं है - मुझे सलाह है कि इस भूलभुलैया जनरेटर में भूलभुलैया हल करने के लिए यह संभव है या नहीं।
JSbin - http://jsbin.com/uwoyon/1
आप एक जे एस बेला में इस कर सकते हैं तो हम देख सकते हैं कि यहाँ हो रहा है? – mpen
किया गया, http://jsbin.com/uwoyon/1 –
जेएस फिडल साइट jsfiddle को संदर्भित करता है :-P – Neal