xxxxxxxxxx
84
let s = 10;
let finish = false; //도착 플래그
let route = [
// 0 1 2 3 4 5 6 7 8 9 0 1
[1,1,1,1,1,1,1,1,1,1,1,1],//0
[1,0,0,0,0,1,0,0,0,1,1,1],//1
[1,0,1,1,0,1,0,1,0,1,1,1],//2
[1,0,1,1,0,0,0,1,0,1,1,1],//3
[1,0,1,1,1,1,1,1,0,0,0,1],//4
[1,0,0,0,0,0,1,1,1,1,1,1],//5
[1,0,1,1,1,0,0,0,0,0,0,1],//6
[1,0,1,0,1,0,1,1,1,1,0,1],//7
[1,0,1,0,1,0,1,1,1,1,0,1],//8
[1,0,1,0,1,0,1,1,1,1,1,1],//9
[1,0,0,0,0,0,0,0,0,0,0,1],//10
[1,1,1,1,1,1,1,1,1,1,1,1],//11
]
let rw,rh;
function setup() {
createCanvas(400, 400);
background(222);
rw = width/s;
rh = height/s;
drawMaze()
DFS(1,1)
}
async function DFS(x,y){
drawMaze(x,y)
await timer(50)
if(finish){
return;
}
if(route[y][x]!=0){//기저사례
return;
}
if(x==10&&y==10){//도착한것
print("도착!");
// finish=true
// route[y][x]=3;
return;
}
//밟았을 때 못가게 표시하기
route[y][x] = 2;
// //상 우 하 좌
await DFS(x,y-1)//상
await DFS(x+1,y)//우
await DFS(x,y+1)//하
await DFS(x-1,y)//좌
//밟은 길을 원래대로 복구
route[y][x]=0;
}
function drawMaze(x,y){
for(let i=0;i<s;i++){
for(let j=0;j<s;j++){
let cp = route[i+1][j+1]
if(cp==1){
fill(255,50,50)
}else if(cp==2){
fill(50)
}else if(cp==3){
fill(0,0,255);
}
else{
fill(255);
}
if(y==i+1&&x==j+1){
fill(0,255,0)
}
rect(j*rw,i*rh,rw,rh)
}
}
}
function timer(t=1000){
return new Promise(res=>{
setTimeout(res, t);
})
}