走迷宫(蓝桥杯)

迷宫路径计数
本文介绍了一个使用深度优先搜索(DFS)算法来遍历并计算所有可能路径数量的Java程序。该程序定义了一个10x10的迷宫,通过递归地探索每个方向(U/D/L/R),记录有效路径,并最终输出所有不同的路径总数。


public class Main {
    public static int count=0;
    static String maze[]= {"UDDLUULRUL","UURLLLRRRU","RRUURLDLRD","RUDDDDUUUU","URUDLLRRUU","DURLRLDLRL"
            ,"ULLURLLRDU","RDLULLRDDD","UUDDUDUDLL","ULRDLUURRR"};
    
    static int visit[][]=new int[10][10];
   
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /* for(int i=0;i<10;i++){
                for(int j=0;j<10;j++){
                    visit[i][j]=0;
                }
            }
          */ 
        
        for(int i=0;i<10;i++){
            for(int j=0;j<10;j++){
                for(int k=0;k<10;k++){
                    for(int l=0;l<10;l++){
                        visit[k][l]=0;   //每次都要消除visit
                    }
                }
                dfs(i,j);
            }
        }
    System.out.println(count);
    }
     public static void dfs(int n,int m){
         if(n<0||n>9||m<0||m>9){
             count++;
             return;
         }
         if(visit[n][m]==1){
             
             return;
         }
         visit[n][m]=1;
        /* switch(maze[n].charAt(m)){
         case 'U':
             dfs(n-1,m);break;
         case 'D':
             dfs(n+1,m);break;
        case 'L':
                dfs(n,m-1);break;
        case 'R':
                dfs(n,m+1);break;
            default:
                break;
         }*/
         if(maze[n].charAt(m)=='U') {
             dfs(n-1,m);
         }
         else if(maze[n].charAt(m)=='D') {
             dfs(n+1,m);
         }
         else if(maze[n].charAt(m)=='L') {
             dfs(n,m-1);
         }
         else if(maze[n].charAt(m)=='R') {
             dfs(n,m+1);
         }
         return;
        }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////


public class Main {
    public static int count=0;
    static String maze[]= {"UDDLUULRUL","UURLLLRRRU","RRUURLDLRD","RUDDDDUUUU","URUDLLRRUU","DURLRLDLRL"
            ,"ULLURLLRDU","RDLULLRDDD","UUDDUDUDLL","ULRDLUURRR"};
    
    static int visit[][]=new int[10][10];
   
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /* for(int i=0;i<10;i++){
                for(int j=0;j<10;j++){
                    visit[i][j]=0;
                }
            }
          */ 
        
        for(int i=0;i<10;i++){
            for(int j=0;j<10;j++){
                for(int k=0;k<10;k++){
                    for(int l=0;l<10;l++){
                        visit[k][l]=0;
                    }
                }
                dfs(i,j);
            }
        }
    System.out.println(count);
    }
     public static void dfs(int n,int m){
         while(true){
         if(n<0||n>9||m<0||m>9){
             count++;
             break;
         }
         if(visit[n][m]==1){
             
             break;
         }
         visit[n][m]=1;
         switch(maze[n].charAt(m)){
         case 'U':
             n=n-1;break;
         case 'D':
             n=n+1;break;
        case 'L':
                m=m-1;break;
        case 'R':
                m=m+1;break;
            default:
                break;
         
         }
         }
}
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值