# """# This is the robot's control interface.# You should not implement it, or speculate about its implementation# """# class Robot:# def move(self):# """# Returns true if the cell in front is open and robot moves into the cell.# Returns false if the cell in front is blocked and robot stays in the current cell.# :rtype bool# """## def turnLeft(self):# """# Robot will stay in the same cell after calling turnLeft/turnRight.# Each turn will be 90 degrees.# :rtype void# """## def turnRight(self):# """# Robot will stay in the same cell after calling turnLeft/turnRight.# Each turn will be 90 degrees.# :rtype void# """## def clean(self):# """# Clean the current cell.# :rtype void# """classSolution:defcleanRoom(self,robot):""" :type robot: Robot :rtype: None """defdfs(i,j,d):vis.add((i,j))robot.clean()forkinrange(4):nd=(d+k)%4x,y=i+dirs[nd],j+dirs[nd+1]if(x,y)notinvisandrobot.move():dfs(x,y,nd)robot.turnRight()robot.turnRight()robot.move()robot.turnRight()robot.turnRight()robot.turnRight()dirs=(-1,0,1,0,-1)vis=set()dfs(0,0,0)
/** * // This is the robot's control interface. * // You should not implement it, or speculate about its implementation * interface Robot { * // Returns true if the cell in front is open and robot moves into the cell. * // Returns false if the cell in front is blocked and robot stays in the current cell. * public boolean move(); * * // Robot will stay in the same cell after calling turnLeft/turnRight. * // Each turn will be 90 degrees. * public void turnLeft(); * public void turnRight(); * * // Clean the current cell. * public void clean(); * } */classSolution{privateint[]dirs={-1,0,1,0,-1};privateSet<List<Integer>>vis=newHashSet<>();privateRobotrobot;publicvoidcleanRoom(Robotrobot){this.robot=robot;dfs(0,0,0);}privatevoiddfs(inti,intj,intd){robot.clean();vis.add(List.of(i,j));for(intk=0;k<4;++k){intnd=(d+k)%4;intx=i+dirs[nd],y=j+dirs[nd+1];if(!vis.contains(List.of(x,y))&&robot.move()){dfs(x,y,nd);robot.turnRight();robot.turnRight();robot.move();robot.turnRight();robot.turnRight();}robot.turnRight();}}}
/** * // This is the robot's control interface. * // You should not implement it, or speculate about its implementation * class Robot { * public: * // Returns true if the cell in front is open and robot moves into the cell. * // Returns false if the cell in front is blocked and robot stays in the current cell. * bool move(); * * // Robot will stay in the same cell after calling turnLeft/turnRight. * // Each turn will be 90 degrees. * void turnLeft(); * void turnRight(); * * // Clean the current cell. * void clean(); * }; */classSolution{public:voidcleanRoom(Robot&robot){intdirs[5]={-1,0,1,0,-1};set<pair<int,int>>vis;function<void(int,int,int)>dfs=[&](inti,intj,intd){robot.clean();vis.insert({i,j});for(intk=0;k<4;++k){intnd=(d+k)%4;intx=i+dirs[nd],y=j+dirs[nd+1];if(!vis.count({x,y})&&robot.move()){dfs(x,y,nd);robot.turnRight();robot.turnRight();robot.move();robot.turnRight();robot.turnRight();}robot.turnRight();}};dfs(0,0,0);}};
/** * // This is the robot's control interface. * // You should not implement it, or speculate about its implementation * type Robot struct { * } * * // Returns true if the cell in front is open and robot moves into the cell. * // Returns false if the cell in front is blocked and robot stays in the current cell. * func (robot *Robot) Move() bool {} * * // Robot will stay in the same cell after calling TurnLeft/TurnRight. * // Each turn will be 90 degrees. * func (robot *Robot) TurnLeft() {} * func (robot *Robot) TurnRight() {} * * // Clean the current cell. * func (robot *Robot) Clean() {} */funccleanRoom(robot*Robot){vis:=map[[2]int]bool{}dirs:=[5]int{-1,0,1,0,-1}vardfsfunc(int,int,int)dfs=func(i,j,dint){vis[[2]int{i,j}]=truerobot.Clean()fork:=0;k<4;k++{nd:=(d+k)%4x,y:=i+dirs[nd],j+dirs[nd+1]if!vis[[2]int{x,y}]&&robot.Move(){dfs(x,y,nd)robot.TurnRight()robot.TurnRight()robot.Move()robot.TurnRight()robot.TurnRight()}robot.TurnRight()}}dfs(0,0,0)}
/** * class Robot { * // Returns true if the cell in front is open and robot moves into the cell. * // Returns false if the cell in front is blocked and robot stays in the current cell. * move(): boolean {} * * // Robot will stay in the same cell after calling turnLeft/turnRight. * // Each turn will be 90 degrees. * turnRight() {} * * // Robot will stay in the same cell after calling turnLeft/turnRight. * // Each turn will be 90 degrees. * turnLeft() {} * * // Clean the current cell. * clean(): {} * } */functioncleanRoom(robot:Robot){constdirs=[-1,0,1,0,-1];constvis=newSet<string>();constdfs=(i:number,j:number,d:number)=>{vis.add(`${i}-${j}`);robot.clean();for(letk=0;k<4;++k){constnd=(d+k)%4;const[x,y]=[i+dirs[nd],j+dirs[nd+1]];if(!vis.has(`${x}-${y}`)&&robot.move()){dfs(x,y,nd);robot.turnRight();robot.turnRight();robot.move();robot.turnRight();robot.turnRight();}robot.turnRight();}};dfs(0,0,0);}