use std.queue; use std.os; use std.unix; rand(time(0)); var pixel=[' ','#','.','*']; var map=[]; for(var i=0;i<10;i+=1) { append(map,[]); for(var j=0;j<20;j+=1) append(map[i],(rand()>0.7)); } var prt = func() { var s="\e[0;0H+--------------------+\n"; for(var i=0;i<10;i+=1) { s~="|"; for(var j=0;j<20;j+=1) s~=pixel[map[i][j]]; s~='|\n'; } s~='+--------------------+\n'; print(s); unix.sleep(1/800); } var bfs = func(begin,end) { var move=[[1,0],[0,1],[-1,0],[0,-1]]; var que=queue.new(); que.push(begin); map[begin[0]][begin[1]]=2; map[end[0]][end[1]]=0; if (map[1][0]==1 and map[0][1]==1) map[1][0]=0; while(!que.empty()) { var vertex=que.front(); que.pop(); foreach(var i;move) { var x=vertex[0]+i[0]; var y=vertex[1]+i[1]; if (x==end[0] and y==end[1]) { map[x][y]=3; prt(); print("reached.\n"); return; } if (0<=x and x<10 and 0<=y and y<20 and map[x][y]==0) { que.push([x,y]); map[x][y]=2; } } prt(); } print("cannot reach.\n"); return; } # enable ANSI escape sequence if (os.platform()=="windows") system("color"); print("\ec"); bfs([0,0],[9,19]);