写道
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();
}
}
}
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();
}
}
}
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();
}
}
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();
}
}
相关推荐
学号:914104220137 姓名: 赵振 指导老师: 任明武 智能扫地机器人 智能扫地机器人全文共12页,当前为第1页。 摘要: 智能扫地机器人,又名智能扫地机,智能吸尘器,是智能家用电器的一种。 可通过预约定时清洁,...
毕业设计基于51单片机扫地机器人设计与实现(源码+PCB+仿真).zip毕业设计基于51单片机扫地机器人设计与实现(源码+PCB+仿真).zip毕业设计基于51单片机扫地机器人设计与实现(源码+PCB+仿真).zip毕业设计基于51...
本论文自主研发了一套智能扫地机器人模型机,并研究了智能扫地机器人的定位导航技术,提出了一套基于传感器探测生成栅格地图的智能扫地机器人全覆盖路径规划算法。经过研究现有智能扫地机器人的技术指标和功能特点,...
扫地机器人基本功能实现,内部各个模块驱动完成,能按照正常的弓字行路劲行走
扫地机器人设计制作课程设计
RK3308扫地机器人方案BOM清单
:模块化设计并制作一种通过传感器探测栅格化地图的智能扫地机器人,采用混合路径规划算法确立机器人的运动轨 迹。在机械上设计了分离式吸尘结构,通过不同结构的吸尘口来清理不同体积大小的垃圾,提高清扫效果。在...
扫地机器人的设计方案
智能扫地机器人仿真代码,使用平台Matlab、VS,使用语言C++、C
扫地机器人的单片机控制系统论文基于STM32的智能扫地机器人避障系统设计的研究_万军基于STM32的智能扫地机器人避障系统设计的研究_万军
智能扫地机器人仿真代码,使用平台Matlab、VS,使用语言C++、C
扫地机器人设计报告.ppt该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~
CN110720862A一种基于扫地机器人投饵消灭蟑螂的方法及扫地机器人 .pdf
基于turtlesim小乌龟实现的ROS 扫地机器人路径覆盖算法,及差速控制。 使用方法: 1、下载源码 cd catkin_ws/src catkin_create_pkg turtlesim_cleaner cd catkin_ws catkin_make 2、运行 roscore //ROS Master ...
关于扫地机器人的路径规划算法的概括,为提高机器人路径规划的搜索速度,缩短搜索时间,总结归纳移动机器人在路径规划问题上的算法及其特点,并对路径规划技术进行概述;其次对移动机器人路径规划进行分类总结,并从...
东华大学 嵌入式设备演讲PPT——扫地机器人!课件资源233333
基于51单片机的扫地机器人设计与实现(源码+protues仿真+ADPCB文件).zip基于51单片机的扫地机器人设计与实现(源码+protues仿真+ADPCB文件).zip基于51单片机的扫地机器人设计与实现(源码+protues仿真+ADPCB文件)...
进人们的日常生活之中,其中作为服务机器人的扫地机器人在近几年被越来越多的消费者青睐。扫地机器人是一种移 动机器人,通过在室内导航完成自主清扫任务,不仅减轻了人们的家务劳动压力,而且相比于人工清洁其清扫...