rheh



package bfspac;

class Queue{
     public final int SIZE = 10000;
     public int[] queArrayx;
     public int[] queArrayy;
     public int[] label;
     public int[] pre_x=new int[SIZE];
     public int[] pre_y=new int[SIZE];
     public int frontx;        //队头
     public int rearx;         //队尾
     public int frontpre_x=0;        //队头
     public int rearpre_x=0;         //队尾
     public int frontpre_y=0;        //队头
     public int rearpre_y=0;         //队尾
   
     public int fronty;        //队头
     public int reary;         //队尾
    
     public int frontlabel;        //队头
     public int rearlabel;         //队尾
     public Queue()
      {
          queArrayx = new int[SIZE];;
          queArrayy = new int[SIZE];
          label=new int[SIZE];
  
          frontx = 0 ;
          fronty = 0 ;
         
          rearx = 0;
          reary = 0;
         
          frontlabel=0;        //队头
        rearlabel=0;         //队尾
      }
      public void insert(int x,int y,int flag)
      {
          queArrayx[rearx++] =x;
          queArrayy[reary++] =y;
          label[rearlabel++]=flag;
      }
      public void insertPre(int m,int n)
      {
       pre_x[rearpre_x++] =m;
       pre_y[rearpre_y++] =n;
        
      }
      public int removex()
      {
          return queArrayx[frontx++];
      }
      public int removey()
      {
          return queArrayy[fronty++];
      }
     
      public int removelabel()
      {
          return label[frontlabel++];
      }
      public boolean isEmpty()
      {
          return (rearx==frontx);
      }
}
public class V_BFS {
     public static int shuzulength;
     public static int[][] map={{0,0,0,0,1},{0,0,1,0,1},{0,0,1,0,0},{1,0,0,0,1},{1,0,0,1,0}};
  public static int[] direx={-1,0,1,0};
  public static int[] direy={0,1,0,-1};
  
  public static int[][] allPathsNum=new int[5][5];

  
     public static void BFS(int x,int y){
      int steps=1;
      map[x][y]=2;
      allPathsNum[x][y]=1;
      
      Queue myQueue=new Queue();
      myQueue.insert(x,y,2);
      myQueue.insertPre(-1, -1);
      while(!myQueue.isEmpty()){
       int curx=myQueue.removex();
       int cury=myQueue.removey();
       int temp=myQueue.removelabel()+1;
       if(curx==3&&cury==3){
        steps=temp-3;
        System.out.println("steps="+steps);
       
        break;
       }
       for(int i=0;i<4;i++){
        int newx=curx+direx[i];
        int newy=cury+direy[i];
        
        if(newx>=0&&newx<shuzulength&&newy>=0&&newy<shuzulength&&map[newx][newy]==temp){
         allPathsNum[newx][newy]=allPathsNum[newx][newy]+allPathsNum[curx][cury];
        }
        if(newx>=0&&newx<shuzulength&&newy>=0&&newy<shuzulength&&map[newx][newy]==0){
         allPathsNum[newx][newy]=allPathsNum[newx][newy]+allPathsNum[curx][cury];
         map[newx][newy]=temp;
         myQueue.insert(newx, newy,temp);
         myQueue.insertPre(curx,cury);
        }
       }
      }
      int zuixlength=steps-1;
      int[] zuix=new int[zuixlength];
      int[] zuiy=new int[zuixlength];
      int tempx=3,tempy=3;
      int temppc=zuixlength-1;
      for(int i=0;i<myQueue.rearx;i++){/zuixlength=1
       
       if(tempx==myQueue.queArrayx[i]&&tempy==myQueue.queArrayy[i])
       {
           zuix[temppc]=myQueue.pre_x[i];
           zuiy[temppc]=myQueue.pre_y[i];
        
           temppc--;
        tempx=myQueue.pre_x[i];
        tempy=myQueue.pre_y[i];
        i=-1;
        if(temppc==-1) break;
       }
       
      }
      System.out.println("zuixlength=="+zuixlength);
      System.out.print("(0,0)->");
      for(int i=0;i<zuixlength;i++){
       System.out.print("("+zuix[i]+","+zuiy[i]+")->");
      }
      System.out.print("(3,3)");
     }
  public static void main(String[] args){
   shuzulength=map.length;
   for(int i=0;i<shuzulength;i++){
    for(int j=0;j<shuzulength;j++){
     System.out.print(map[i][j]+" ");
    }
    System.out.println(" ");
   }
   System.out.println(" ");
         BFS(0,0);
         System.out.println(" ");
         for(int k=0;k<shuzulength;k++){
      for(int m=0;m<shuzulength;m++){
       System.out.print(map[k][m]+" ");
      }
      System.out.println(" ");
      }
         System.out.println(" ");
         for(int k=0;k<5;k++){
      for(int m=0;m<5;m++){
       System.out.print(allPathsNum[k][m]+" ");
      }
      System.out.println(" ");
      }
         System.out.println(" ");
         System.out.println("allPathsNum="+allPathsNum[3][3]);
  } 
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值