`
wfzhanga
  • 浏览: 68478 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

扫地机器人

 
阅读更多
写道
package qlcoder.robot2;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Room {
private int level;
private int x;
private int y;
private boolean[] map;

public int getLevel() {
return level;
}

public void setLevel(int level) {
this.level = level;
}

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public int getY() {
return y;
}

public void setY(int y) {
this.y = y;
}

public boolean[] getMap() {
return map;
}

public void setMap(boolean[] map) {
this.map = map;
}

public Room(){
String str = getJsonString();
//String str = "level=1x=3y=3map=100000001";
this.level = Integer.valueOf(getMatcherNumber("level=",str));
this.x = Integer.valueOf(getMatcherNumber("x=",str));
this.y = Integer.valueOf(getMatcherNumber("y=",str));
char[] mapChars = getMatcherNumber("map=",str).toCharArray();
this.map = new boolean[x * y];
for(int i=0;i<y;i++){
for(int j=0;j<x;j++){
int index = i * x + j;
map[index] = (mapChars[index] == '1');
}
}
}

private String getJsonString(){
StringBuilder sb = new StringBuilder();
File file = new File(new File("").getAbsolutePath() + "\\file\\rbot.txt");
Reader reader;
BufferedReader br;
try {
reader = new FileReader(file);
br = new BufferedReader(reader);
String result = null;
while((result = br.readLine())!=null){
sb.append(result);
}
reader.close();
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return sb.toString().trim();
}

private String getMatcherNumber(String patternStr,String str){
String value = null;
Pattern pattern = Pattern.compile(patternStr + "(\\d+)");
Matcher matcher = pattern.matcher(str);
if(matcher.find()){
value = matcher.group(0);
value = value.substring(patternStr.length());
}
return value;
}

public void show(){
System.out.println("level = " + level + ",x= " + x + ",y= " + y + ",map:");
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
String str = map[i * x + j]?"1":"0";
System.out.print( str + " ");
}
System.out.println();
}
}
}

 

写道
package qlcoder.robot2;

public class Robot {

private boolean[] map;
private int Max_width = 0;
private int Max_higth = 0;
private int old_width = 0;
private int old_higth = 0;
public void setRoom(Room room){
this.map = room.getMap();
this.Max_width = room.getX();
this.Max_higth = room.getY();
}

public boolean getRoute(int higth,int width){
this.old_higth = higth;
this.old_width = width;
boolean[] mapper = map.clone();
mapper[higth * Max_width + width] = true;
return nextRout(higth,width,mapper,"");
}

public boolean nextRout(int higth,int width,boolean[] mapper, String sb){
if(complete(mapper)){
System.out.println("start point:[x = " + (1+old_width) + ",y=" + (1+old_higth) + "]. route = " + sb.toLowerCase());
return true;
}
if(doLeft(higth,width,mapper,sb)){
return true;
}
if(doRight(higth,width,mapper,sb)){
return true;
}
if(doUp(higth,width,mapper,sb)){
return true;
}
if(doDown(higth,width,mapper,sb)){
return true;
}
return false;
}

private boolean complete(boolean[] mapper){
for(int i=0;i<mapper.length;i++){
if(!mapper[i]){
return false;
}
}
return true;
}

public boolean doLeft(int higth,int width,boolean[] mapper, String sb){
int index = higth * Max_width + width;
if(width == 0 || mapper[index-1]){
return false;
}
sb = sb + "L";
while(width > 0 && !mapper[index-1]){
width = width -1;
index = index -1;
mapper[higth * Max_width + width] = true;
}
return nextRout(higth,width,mapper.clone(),sb);
}

public boolean doRight(int higth,int width,boolean[] mapper, String sb){
int index = higth * Max_width + width;
if(width == Max_width -1 || mapper[index+1]){
return false;
}
sb = sb + "R";
while(width < Max_width - 1 && !mapper[index+1]){
width = width + 1;
index = index + 1;
mapper[higth * Max_width + width] = true;
}
return nextRout(higth,width,mapper.clone(),sb);
}

public boolean doUp(int higth,int width,boolean[] mapper, String sb){
int index = higth * Max_width + width;
if(higth == 0 || mapper[index - Max_width]){
return false;
}
sb = sb + "U";
while(higth > 0 && !mapper[index - Max_width]){
higth = higth - 1;
index = index - Max_width;
mapper[higth * Max_width + width] = true;
}
return nextRout(higth,width,mapper.clone(), sb);
}

public boolean doDown(int higth,int width,boolean[] mapper, String sb){
int index = higth * Max_width + width;
if(higth == Max_higth -1 || mapper[index + Max_width]){
return false;
}
sb = sb + "D";
while(higth < Max_higth -1 && !mapper[index + Max_width]){
higth = higth + 1;
index = index + Max_width;
mapper[higth * Max_width + width] = true;

}
return nextRout(higth,width,mapper.clone(), sb);
}

public void show(boolean[] map){
System.out.println("map:");
for(int i=0;i<Max_higth;i++){
for(int j=0;j<Max_width;j++){
String str = map[i * Max_width + j]?"1":"0";
System.out.print( str + " ");
}
System.out.println();
}
}
}

 

写道
package qlcoder.robot2;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class IRobotScooba {

public void doAction(){
Room room = new Room();
room.show();
ExecutorService service = Executors.newFixedThreadPool(room.getY());
for(int i=0;i<room.getY();i++){
service.submit(new Task(i,room));
}
service.shutdown();
}

public class Task implements Runnable{
private int taskId;
private Room room;
public Task(int id,Room room){
this.taskId = id;
this.room = room;
}

public void run() {
for(int j=0;j<room.getX();j++){
if(!room.getMap()[taskId * room.getX() + j]){
Robot robot = new Robot();
robot.setRoom(room);
if(robot.getRoute(taskId,j)){
}
}
}
System.out.println("任务"+ taskId +"已成!");
}
}

public static void main(String[] args) {
IRobotScooba test = new IRobotScooba();
test.doAction();
}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics