2021-05-25

没有涉及复杂的算法,纯暴力的方式走迷宫

import java.util.Scanner;
public class Main
{
    static int length,wideth;//迷宫矩阵的长度和宽度
    static int x,y;//起始位置的坐标
    static String[][] arr;//迷宫的二维数组
    static int n;//当前走的走的步数
    public static void main(String[] args){
        Scanner in = new Scanner (System.in);
        System.out.println("输入迷宫的长度、宽度(行数和列数不超过50)");
        wideth =in.nextInt();
        length =in.nextInt();  //让用户输入迷宫的宽度和长度
        arr = new String[wideth][length];
        System.out.println("请输入"+wideth+"行"+length+"列的迷宫 ('0'表示墙,'1' 表示道路 '4'表示起点 '5'表示终点 )");
//从键盘读取迷宫
        for (int i=0;i<wideth;i++) {
            for(int j=0;j<length;j++) {
                arr[i][j] = in.next();
            }
        }
//遍历一次迷宫,找到起点,记下起点的坐标
        for (int i=0;i<wideth;i++) {
            for(int j=0;j<length;j++) {
                if (arr[i][j].equals("4")) {
                    x=i;
                    y=j;
                }
            }
        }
//开始尝试找出口
        try {
            Running(x,y,n);
 
        }catch (Exception e) {
//接收异常,打印数组
            System.out.println();
            System.out.println("找到出口!路径如下(*代表路径):");
            for (int i=0;i<wideth;i++) {
                for(int j=0;j<length;j++) {
                    System.out.print(arr[i][j]);
                    if(j==length-1)
                        System.out.println();
                    else System.out.print(" ");
                }
            }
 
            System.exit(0); //结束程序
        }
//如果程序正常退出,说明迷宫没有出口
        System.out.println("该迷宫没有出口!!!");
 
    }
 
    /*找出口的递归函数*/
    public static void Running(int x,int y,int n) throws Exception {
 
        System.out.println("步数:"+n+"  当前位置:("+(x+1)+","+(y+1)+")");//打印每一步方便理解
 
 
        if(arr[x][y].equals("5")){
            Exception e= new Exception();
            throw e;//当找到出口'5'时,手动抛出一个抛出异常,跳出整个递归函数
        }
        if(!arr[x][y].equals("4")) //若非起点和终点,将该点做个记号"*"表示已经走过
            arr[x][y]="*";
 
        /*判断上下左右有没有终点*/
        if(y-1>=0&&arr[x][y-1].equals("5")){
            Running(x,y-1,n+1);
        }
        if(x-1>=0&&arr[x-1][y].equals("5")){
            Running(x-1,y,n+1);
        }
        if(y+1<length&&arr[x][y+1].equals("5")){
            Running(x,y+1,n+1);
        }
        if(x+1<wideth&&arr[x+1][y].equals("5")){
            Running(x+1,y,n+1);
        }
 
        /*如果没有终点,则看上下左右有没有道路*/
        if(x+1<wideth&&arr[x+1][y].equals("1")){
            Running(x+1,y,n+1);  //向下
        }
        if(y+1<length&&arr[x][y+1].equals("1")){
            Running(x,y+1,n+1);  //向右
        }
        if(y-1>=0&&(arr[x][y-1].equals("1"))){
            Running(x,y-1,n+1);  //向左
        }
        if(x-1>=0&&arr[x-1][y].equals("1")){
            Running(x-1,y,n+1);  //向上
        }
 
        arr[x][y]="#"; //如果没有道路,说明是死胡同,将改点标记为“#”
        /* 再看上下左右有没有之前走过的路并返回之前走过的路*/
        if(y-1>=0&&(arr[x][y-1].equals("*"))){
            Running(x,y-1,n+1);
        }
        if(x-1>=0&&arr[x-1][y].equals("*")){
            Running(x-1,y,n+1);
        }
        if(y+1<length&&arr[x][y+1].equals("*")){
            Running(x,y+1,n+1);
        }
        if(x+1<wideth&&arr[x+1][y].equals("*")){
            Running(x+1,y,n+1);
        }
 /*     如果上诉条件都不满足,说明该方向的道路是死路,该层递归结束,返回上一层递归
       以此类推,直到返回第一层递归,继续找其他方向的路。
       在第一层递归中,如果上述条件都不满足,说明迷宫没有出口
       程序正常退出,不会抛出异常
 */
    }
 
}

运行示例:

(*号代表走过的路径)
————————————————
版权声明:本文为CSDN博主「man_zuo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/man_zuo/article/details/80145815

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
最新发布
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值