迷宫算法 量子

来源:互联网 发布:java爬虫抓取app数据 编辑:程序博客网 时间:2024/05/02 02:43

可执行,无优化,比较乱,呵呵,谁要是有心情改了,或者在其它地方有比较清晰的实现,回发我一份:)

=======================================================================
public class MazeGame {
 final int MOUSE_TEAMSIZE=250;
 Mouse []MTeam = new Mouse[MOUSE_TEAMSIZE];
 Maze maze = new Maze();
 boolean out = false;
 
 public MazeGame (){
  maze.createMaze();
 }
 
   
 
 public static void main(String args[]){
  MazeGame mazegame = new MazeGame();
  mazegame.adventure();
 }
 public boolean adventure(){
  boolean ret=false;
  Mouse firstMouse = new Mouse(0);
  firstMouse.direct = 3;
  firstMouse.roomid = 0;
  setMouse(0,firstMouse);
  int tbret = 0;
  int step=0;
  while(out!=true){
   tbret = 0;
   
   for(int i=0;i<MTeam.length;i++){
   
    if(MTeam[i]!=null ){
     
     if( MTeam[i].step==step){
      
      if( MTeam[i].travel())
       tbret++;
     }
     
    }
    
    if(out==true ){
     System.out.println("==end==");
     for(int k=0;k<MTeam.length;k++){
      if(MTeam[k]!=null){
       for(int j=0;j<MTeam[k].pos;j++){
        System.out.print(MTeam[k].path[j]+",");
       }
       System.out.println("");
      }
     }
     break;
    }
   }
   if(tbret==0){    
    System.out.println("no path");
    break;
   } 
   step++;
  }
  
  return ret;
 }
 
 public int getEmptyPosition(){
  for(int i=0;i<MTeam.length;i++){
   if(MTeam[i]==null)
    return i;
  }
  return -1;
 }
 
 public void setMouse(int Position,Mouse mouse){
  MTeam[Position] = mouse;
  if(mouse!=null)
   mouse.mouseid = Position;
 }
 
 
 
 class Mouse{
  final int MAX_PATH=250;  
  int path[]=new int[MAX_PATH];
  int pos = 0;
  int roomid;
  int direct;
  int mouseid;
  int step=0;
  public Mouse(int mouseid ){
   
   this.mouseid = mouseid;
  }
  public boolean travel(){
   int icount=0;
   Room room = maze.getRoom(roomid);
   path[pos++] = roomid;
   if(room.visited){
    for(int j=0;j<this.pos;j++){
     System.out.print(this.path[j]+",");
    }
    System.out.println("");
    setMouse(this.mouseid,null);
    return false;
   }
   room.visited = true;
   int comedirect = direct;
   int sourceroomid= roomid;
   
   
   if(room.east==1 && comedirect!=0){
    Room newroom = maze.nextRoom(sourceroomid,0);
    if(newroom == null){
     out = true;
     return true;
    }
    
    if(!newroom.visited){
     int aindex = getEmptyPosition();
     if(aindex>-1){
      Mouse subMouse = this.copy(this);
      subMouse.roomid = newroom.roomid;
      subMouse.direct = 2;
      subMouse.step +=1;
      setMouse(aindex,subMouse);
      icount++;
     }else
      return false;
    }
   }
   if(room.south==1  && comedirect!=1){
    Room newroom = maze.nextRoom(sourceroomid,1);
    if(newroom == null){
     out = true;
     return true;
    }
    
    if(!newroom.visited){
     int aindex = getEmptyPosition();
     if(aindex>-1){
      Mouse subMouse = this.copy(this);
      subMouse.roomid = newroom.roomid;
      subMouse.direct = 3;
      subMouse.step +=1;
      setMouse(aindex,subMouse);
      icount++;
     }else
      return false;
    }
    
   }
   if(room.west==1 && comedirect!=2){
    Room newroom = maze.nextRoom(sourceroomid,2);
    if(newroom == null){
     out = true;
     return true;
    }
    
    if(!newroom.visited){
     
     if(!newroom.visited){
      int aindex = getEmptyPosition();
      if(aindex>-1){
       Mouse subMouse = this.copy(this);
       subMouse.roomid = newroom.roomid;
       subMouse.direct = 0;
       subMouse.step +=1;
       setMouse(aindex,subMouse);
       icount++;
      }else
       return false;
     }
    }
   }
   if(room.north==1 && comedirect!=3){
    Room newroom = maze.nextRoom(sourceroomid,3);
    if(newroom == null){
     out = true;
     return true;
    }
    
    if(!newroom.visited){
     
     if(!newroom.visited){
      int aindex = getEmptyPosition();
      if(aindex>-1){
       Mouse subMouse = this.copy(this);
       subMouse.roomid = newroom.roomid;
       subMouse.direct = 1;
       subMouse.step +=1;
       setMouse(aindex,subMouse);
       icount++;
      }else
       return false;
     }
     icount++;
    }
   }
   setMouse(this.mouseid,null);
   if(icount>0)
    return true;
   else{
    for(int j=0;j<this.pos;j++){
     System.out.print(this.path[j]+",");
    }
    System.out.println("");
    return false;
   }
  
  }
  public Mouse copy(Mouse old){
   Mouse newmouse = new Mouse(old.mouseid); 
   newmouse.direct = old.direct;
   newmouse.roomid = old.roomid;
   newmouse.pos =  old.pos;
   newmouse.step = old.step ;
   for(int i=0;i<old.path.length;i++)
   {
    newmouse.path[i]=old.path[i];
   }
   return newmouse;
  }
 }
 
 class Maze{
  Room [] mazeroms =  new Room[25];
  public void createMaze(){
   int i=0;
   mazeroms[i] = new Room(i,1,0,0,1);i++;
   mazeroms[i] = new Room(i,1,0,1,0);i++;
   mazeroms[i] = new Room(i,1,1,1,0);i++;
   mazeroms[i] = new Room(i,1,0,1,0);i++;
   mazeroms[i] = new Room(i,0,1,0,0);i++;
   mazeroms[i] = new Room(i,1,0,0,1);i++;
   mazeroms[i] = new Room(i,1,0,1,1);i++;
   mazeroms[i] = new Room(i,1,0,1,1);i++;
   mazeroms[i] = new Room(i,1,0,1,1);i++;
   mazeroms[i] = new Room(i,0,1,1,0);i++;
   mazeroms[i] = new Room(i,1,1,0,0);i++;
   mazeroms[i] = new Room(i,1,0,1,0);i++;
   mazeroms[i] = new Room(i,1,1,1,0);i++;
   mazeroms[i] = new Room(i,1,0,1,0);i++;
   mazeroms[i] = new Room(i,0,1,1,1);i++;
   mazeroms[i] = new Room(i,0,1,0,1);i++;
   mazeroms[i] = new Room(i,1,1,0,0);i++;
   mazeroms[i] = new Room(i,1,0,1,1);i++;
   mazeroms[i] = new Room(i,1,1,1,0);i++;
   mazeroms[i] = new Room(i,0,1,1,0);i++;
   mazeroms[i] = new Room(i,1,0,0,1);i++;
   mazeroms[i] = new Room(i,1,0,1,1);i++;
   mazeroms[i] = new Room(i,1,0,1,0);i++;
   mazeroms[i] = new Room(i,0,0,1,1);i++;
   mazeroms[i] = new Room(i,0,1,1,1);
  }
  
  public Room nextRoom(int roomid,int direction){
   int row = roomid/5;
   int col=roomid%5;
   switch(direction){
    case 0:
     col+=1;
     break;
    
    case 1:
     row+=1;
     break;
    case 2:
     col-=1;
     break;
    case 3:
     row-=1;
     break;
   }
   if(row<0||row>4||col<0||col>4)
    return null;
   return getRoom(row*5+col);
   
  }
  public Room getRoom(int roomid){
   if(roomid>mazeroms.length)
    return null;
   else
    return mazeroms[roomid];
  }
  
 }
 class Room{
  boolean visited =false;
  int east;
  int south;
  int west;
  int north;
  int roomid;
  public Room(int roomid,int east,int south,int west,int north){
   this.east = east;
   this.south = south;
   this.west = west;
   this.north = north;
   this.roomid = roomid;
  }
  
 }

}
 

原创粉丝点击