어떻게 JAVA 를 이용 하여 미로 프로그램 을 실현 합 니까?
테스트 클래스
사용자 정의 Stack 클래스
사용자 정의 Queue 클래스
실현 가능 한 기능:
1.텍스트 파일 에 적 힌 미로 에 대해 서 는 2 차원 배열 로 전환 하여 가장 짧 은 경 로 를 찾 을 수 있 습 니 다.
2.미로 의 입구 와 출구 를 정의 하지 않 고 자동 으로 출입 구 를 찾 을 수 있 습 니 다.
전 제 는 대응 하 는 경로 의.txt 파일 이 있어 야 합 니 다.
여기 예 를 들 어 보 겠 습 니 다.저 는'F:/1 번 미로(0,18).txt'경로 에서
실행 결과
예제 코드
주석 을 매우 상세 하 게 썼 으 니,여 기 는 군말 이 많 지 않다.
package com;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
/**
* 1 (0,18).txt
*2 (0,1).txt
*/
public class Test {
public static void main(String[] args) throws Exception {
Test test = new Test();
//
char[][] arr = test.getFile("F:/1 (0,18).txt");
System.out.println(" :"+arr[0].length);
int deep = test.getDeepByChar(arr);
System.out.println(" :"+deep);
//
int [] begin = test.begin(arr);
System.out.println(" :("+begin[0]+","+begin[1]+")");
//
int [] end = test.end(arr,deep);
System.out.println(" :("+end[0]+","+end[1]+")");
System.out.println("================================= ============================================");
//
test.printArr(arr,deep);
System.out.println("================================= ===========================================");
//
int[][] bfs = test.bfs(arr,begin,end,deep);
for (int i = 0; i < deep; i++) {
for (int j = 0; j < bfs[0].length; j++) {
System.out.print(bfs[i][j]+"\t");
}
System.out.println();
}
System.out.println("================================ ===============================================");
//
int[][] result = test.getLoaderFromMap(bfs, begin, end, deep);
// result
int deep1 = test.getDeepByInt(result);
for (int i = 0; i < deep1; i++) {
System.out.println("("+result[i][0]+","+result[i][1]+")\t");
}
}
//
public int[][] bfs(char [][] arr, int [] begin, int [] end,int deep) {
//
int[] dx = {1, 0, -1, 0};
int[] dy = {0, 1, 0, -1};
//d
int[][] d = new int [deep][arr[0].length];
// , LinkedList Deque,Deque Queue
Queue1<int[]> que = new Queue1<>();
// Queue<int []> que = new LinkedList<>();
//
for(int i = 0; i < d.length; i++) {
for(int j = 0; j < d[0].length; j++) {
d[i][j] = -1;
}
}
//
que.offer(begin);
// 0
d[begin[0]][begin[1]] = 0;
//
while(!que.isEmpty()) {
//
int [] current = que.poll();
//
if(current[0] == end[0] && current[1] == end[1]){
break;
}
//
for(int i = 0; i < 4; i++) {
//
int nx = current[0] + dx[i];
int ny = current[1] + dy[i];
//
if(nx >= 0 && nx < deep && ny >= 0 && ny < d[0].length && arr[nx][ny] == '0' && d[nx][ny] == -1) {
// , 1
d[nx][ny] = d[current[0]][current[1]] + 1;
//
int[] c = {nx, ny};
que.offer(c);
}
}
}
return d;
}
//
private int [][] getLoaderFromMap(int [][] map,int [] begin,int [] end,int deep) {
int k = 0;//
//
int[][] resultList = new int[map.length * map.length][2];
//result
int[] result;
// , ,
Stack1<int[]> stack = new Stack1<>();
//
stack.push(end);
//
int[] dx = {1, 0, -1, 0};
int[] dy = {0, 1, 0, -1};
// ,
// ,
while(true){
// ,
int[] current = stack.peek();
for (int i = 0; i < 4; i++) {
//
int nx = current[0] + dx[i];
int ny = current[1] + dy[i];
// ,
if(map[current[0]][current[1]] != map[begin[0]][begin[1]]){
//
if (nx >= 0 && nx < deep && ny >= 0 && ny < map[0].length && map[nx][ny] != -1) {
// , 1
if(map[nx][ny] == map[current[0]][current[1]]-1){
// ,
result = new int[]{nx, ny};
stack.push(result);
}
}
}else{
k++;
break;
}
}
//k , map[current[0]][current[1]] != map[begin[0]][begin[1]]
// , , while for ,
if(k != 0){
break;
}
}
// resultList
int len = stack.length();
for(int i = 0;i < len;i++){
result = stack.pop();
resultList[i][0] = result[0];
resultList[i][1] = result[1];
}
return resultList;
}
//
private char[][] getFile (String pathName) throws Exception {
File file = new File(pathName);
//
if (!file.exists())
throw new RuntimeException("Not File!");
// // , new
BufferedReader br = new BufferedReader(new FileReader(file));
// str
String str;
//
char[][] arr = new char[110][];
//x
int x = 0;
while ((str = br.readLine()) != null) {
x++;
//
char[] cArr = str.toCharArray();
//
arr[x - 1] = cArr;
}
br.close();
return arr;
}
//
private int[] begin ( char[][] arr){
// begin[0]=x,begin[1]=y
int[] begin = new int[2];
// StringBuffer ,
StringBuffer s = new StringBuffer();
for (int i = 0; i < arr[0].length; i++) {
s.append(arr[0][i]);
}
//
//
if (s.indexOf("0") != -1) {
begin[0] = 0;
begin[1] = s.indexOf("0");
return begin;
} else {
//
for (int i = 0; i < arr.length; i++) {
if (arr[i][0] == '0') {
begin[0] = i;
begin[1] = 0;
return begin;
}
}
}
return begin;
}
//
private int[] end ( char[][] arr, int deep){
// end[0]=x,end[1]=y
int[] end = new int[2];
// //18
for (int i = 0; i < deep; i++) {
//
if (arr[i][arr[0].length - 1] == '0') {
end[0] = i;
end[1] = arr[0].length - 1;
return end;
}
}
//
for (int i = 0; i < arr.length; i++) {
// //deep
if (arr[deep - 1][i] == '0') {
end[0] = deep - 1;
end[1] = i;
return end;
}
}
return end;
}
/**
* 110, 110,
* , ,
* ,
*/
//
private int getDeepByChar ( char[][] arr){
int y = 0;//
for (int i = 0; i < arr.length; i++) {
// i , i , y
try {
// 1 0,
if (arr[i][0] != '1' && arr[i][0] != '0') {
break;
}
} catch (Exception e) {
return y;
}
y++;
}
return y;
}
//
private int getDeepByInt ( int[][] arr){
int y = 0;//
for (int i = 0; i < arr.length; i++) {
// (0,0) ,
if (arr[i][0] == 0 && arr[i][1] == 0) {
break;
}
y++;
}
return y;
}
//
private void printArr ( char[][] arr, int deep){
for (int i = 0; i < arr[0].length; i++) {
for (int j = 0; j < deep; j++) {
try {
System.out.print(arr[i][j] + "\t");
} catch (Exception e) {
}
}
System.out.println();
}
}
}
/**
*
* @param <E>
*/
class Queue1<E> {
private E[] arr;//
private int size;//size
private int putIndex=-1;//putIndex , arr[0]
//
protected Queue1(int initSize){
if(initSize < 0){
throw new IllegalArgumentException(" ");
}
arr = (E[])new Object[initSize];
size = 0;
}
// , 10
protected Queue1(){
this(110);
}
//
protected void offer(E e){
if(size == arr.length) {
throw new ArrayIndexOutOfBoundsException(" push , ");
}
arr[++putIndex] = e;
size++;
}
//
protected boolean isEmpty(){
return size == 0?true:false;
}
//
protected E poll() {
if (size == 0) {
throw new ArrayIndexOutOfBoundsException("This queue is empty! ");
}
E tmp = arr[0];
//
for (int i = 0; i < size - 1; i++) {
arr[i] = arr[i + 1];
}
arr[size - 1] = null;
putIndex--;
size--;
return tmp;
}
}
/**
*
* @param <E>
*/
class Stack1<E> {
private int maxSize;//
private int top = -1;// , -1
private E[] data;//
//
protected Stack1(int maxSize){
if(maxSize > 0){
this.maxSize = maxSize;
//data
data = (E[])new Object[maxSize];
}else{
throw new IllegalArgumentException(" , ");
}
}
// 10
protected Stack1(){
// , 10
this(10);
}
//
protected boolean push(E e){
//
if(top == maxSize-1){
//
this.resize();
}
// top++, top = e
data [++top] = e;
return true;
}
//
protected boolean isEmpty(){
return top == -1;
}
//
protected int length(){
return top+1;
}
//
protected E pop(){
//
if(top == -1){
throw new IllegalArgumentException(" ");
}
else{
E e = data[top];
// top = null, top--
data[top--] = null;
return e;
}
}
//
protected E peek(){
//
if(top == -1){
throw new IllegalArgumentException(" ");
}else{
return data[top];
}
}
// ,
protected void resize(){
int newSize = maxSize*2;
E[] newData = (E[])new Object[newSize];
for (int i = 0;i < data.length;i ++){
newData[i] = data[i];
}
//
maxSize = newSize;
// newData data
data = newData;
}
}
총결산JAVA 를 이용 하여 미로 프로그램 을 어떻게 실현 하 는 지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 JAVA 미로 프로그램 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.