一個JAVA編寫的迷宮演算法。。自動找迷宮出口

來源:互聯網
上載者:User
 

import java.awt.Color;
import java.awt.GridLayout;
import java.util.Stack; 

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class FindPath { 

 private static final int wid = 10; 
 private static final int hei = 10; 
 JFrame frame;  //表單,是整個迷宮的容器
 JPanel panel;
 JButton button[];
 private Stack stack = new Stack();  
 public static void main(String[] args) { 

  byte[] map ={
    1,1,1,1,1,1,1,1,1,1,
    1,0,0,1,0,0,0,1,0,1,
    1,0,0,1,0,0,0,1,0,1,
    1,0,0,0,0,1,1,0,0,1,
    1,0,1,1,1,0,0,0,0,1,
    1,0,0,0,1,0,0,0,0,1,
    1,0,1,0,0,0,1,0,0,1,
    1,0,1,1,1,0,1,1,0,1,
    1,1,0,0,0,0,0,0,0,1,
    1,1,1,1,1,1,1,1,1,1,  
  };
 
  int i=0;
 
  

  FindPath ai = new FindPath(); 
  ai.find(map, 11, 88); 

 } 

 FindPath()
 {
 
  int i;
  frame = new JFrame("孫堯的神奇迷宮");
  frame.setBounds(300,240,500,500);  //調整迷宮出現的位置及大小
  frame.setResizable(false);//表單不可展開 
  
  panel = new JPanel();
  frame.getContentPane().add(panel);  //將面板添加到表單中
  panel.setLayout(new GridLayout(10,10)); //panel用網格布局,10行10列  
    
  button = new JButton[100];     
     for ( i = 0; i < button.length; i++)
     {
       button[i]=new JButton(Integer.toString(i)); //建立按鍵的名字,Integer型的名字為i的字串
       if((i>=0&&i<=9)||(i>=90&&i<=99)||i%10==0||i%10==9||i==13||i==17||i==23||i==27||i==35||i==36||i==42||i==43||i==44||i==54||i==62||i==66||i==72||i==73||i==74||i==76||i==77||i==81)
       {
        button[i].setBackground(Color.red);

       }
       else
       {
        button[i].setBackground(Color.white);

       }
       button[i].setSize(10,10);
       panel.add(button[i]);
     }
    
  frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); //聲明點“X”表徵圖後結束表單所在的應用程式
     frame.setVisible(true);  //表明以上建立的所有表單、按鍵等組件都是可見的
 }
 
 public void find(byte[] map, int origin, int target) { 
  int[] step = new int[2]; 
  step[1] = origin; 
  stack.addElement(step); 
  if(findPath(map,origin,target)){ 
   System.out.println("succ"); 
   for (int i = 0; i < stack.size(); i++) { 
    int[] temp = (int[])stack.elementAt(i); 
    System.out.println(i+" /t"+(char)temp[0]+" "+temp[1]); 
    button[temp[1]].setBackground(Color.blue);
   } 
  }else{ 
   System.out.println("fail"); 
  } 
 } 

 public boolean findPath(byte[] map, int origin, int target) { 
  if (canMoveTo(map, origin, target, 'l')) { 
   return true; 
  } 
  if (canMoveTo(map, origin, target, 'r')) { 
   return true; 
  } 
  if (canMoveTo(map, origin, target, 'u')) { 
   return true; 
  } 
  if (canMoveTo(map, origin, target, 'd')) { 
   return true; 
  } 
  stack.pop();// 如果四個方向都試過,全部不行,那麼把當前步驟彈出 
  return false; 
 } 

 private boolean canMoveTo(byte[] map, int origin, int target, char direct) { 
  int next = 0; 
  switch (direct) { 
  case 'l': 
   next = origin - 1; 
   break; 
  case 'r': 
   next = origin + 1; 
   break; 
  case 'u': 
   next = origin - wid; 
   break; 
  case 'd': 
   next = origin + wid; 
   break; 
  } 
  if (map[next] == 0) {//如果目標位置可以進入 
   if (next == target) { 
    int[] step = new int[2]; 
    step[0] = direct;// 移動方向 
    step[1] = next;// 到達的新位置 
    stack.addElement(step);     
    return true; 
   } 
   if (!inStack(next)) { 
    int[] step = new int[2]; 
    step[0] = direct; 
    step[1] = next; 
    stack.addElement(step); 
    if (findPath(map, next, target)) { 
     return true; 
    } 
   } 
  } 
  return false; 
 } 

 

 private boolean inStack(int posi) { 
  int[] temp; 
  for (int i = stack.size() - 1; i >= 0; i--) { 
   temp = (int[]) stack.elementAt(i); 
   if (posi == temp[1]) { 
    return true; 
   } 
  } 
  return false; 
 } 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.