当前位置: 首页 > article >正文

HJ43 迷宫问题

HJ43 迷宫问题
迷宫问题

描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示:

int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路, 只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。
入口点为[0,0],既第一格是可以走的路。

数据范围:2≤n,m≤10  , 输入的内容只包含 0≤val≤1     
输入描述:输入两个整数,分别表示二维数组的行数,列数。 			
   		再输入相应的数组,其中的1表示墙壁,0表示可以走的路。
   		数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。     
输出描述:左上角到右下角的最短路径,格式如样例所示。 ```
using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        string str = Console.ReadLine();
        int m = Convert.ToInt32(str.Split(' ')[0]);
        int n = Convert.ToInt32(str.Split(' ')[1]);
        int[,] dp=new int[m,n];
        for (int i = 0; i < m; i++)
        {
            string mstr = Console.ReadLine();
            for (int j = 0; j < n; j++)
            {
                dp[i, j] = Convert.ToInt32(mstr.Split(' ')[j]);
            }
        }
        Stack<int> stacks = new Stack<int> ();
        stacks.Push(0);
        Stack<(int, int)> stack = new Stack<(int, int)>();
        stack.Push((0,  0));
        int s = 0;
        for (int i = 0,j=0; i < m && j < n; )
        {
            if (i == m - 1 && j == n - 1)
            {
                break;
            }
            if (j + 1 < n && dp[i,j + 1] == 0 && s< 1 && !stack.Contains((i, j + 1)))
            {
                stack.Push((i, j + 1));
                stacks.Push(1);
                s = 0;
                j++;
                continue;
            }
            
            if (i + 1 < m && dp[i+1, j] == 0 &&  s < 2 && !stack.Contains((i + 1, j)))
            {
                stack.Push((i + 1, j));
                stacks.Push(2);
                s = 0;
                i++;
                continue;
            }
            if (j > 0 && dp[i, j-1] == 0 && s <3 && !stack.Contains((i, j-1)))
            {
                stack.Push((i, j - 1));
                stacks.Push(3);
                s = 0;
                j--;
                continue;
            }
            if (i > 0 && dp[i - 1, j] == 0 &&  s <4 &&!stack.Contains((i -1,j)))
            {
                stack.Push((i - 1, j));
                stacks.Push(4);
                s = 0;
                i--;
                continue;
            }
            stack.Pop();
            var sit = stack.Peek();
            i = sit.Item1;
            j = sit.Item2;
            s = stacks.Pop();
        }
        
        Stack<(int, int)> stackseq = new Stack<(int, int)>();
        foreach (var item in stack)
        {
            stackseq.Push(item);
        }
        foreach (var item in stackseq)
        {
             Console.WriteLine("(" + item.Item1 + "," + item.Item2 + ")");
        }
        
    }
}

http://www.kler.cn/a/379463.html

相关文章:

  • C++线程异步
  • vue3中使用vue-diff工具来比较数据差异
  • LSTM:解决梯度消失与长期依赖问题
  • Apache POI(java操作Miscrosoft Office)
  • 鸿蒙系统:核心特性、发展历程与面临的机遇与挑战
  • ai智能语音电销机器人可以做哪些事情?
  • 虚拟机安装
  • 危机来临前---- 力扣: 876
  • 双指针-01-三数之和
  • LeetCode:3259. 超级饮料的最大强化能量(DP Java)
  • 架构师考试系列(8)论文专题:信息系统安全设计
  • 微服务系列三:微服务核心——网关路由
  • 穿越数据迷宫
  • 总结拓展十五:SAP物料分割评估
  • C++ | Leetcode C++题解之第530题二叉搜索树的最小绝对差
  • 解决Corrupt JPEG data: premature end of data segment
  • Oracle视频基础1.3.5练习
  • 操作系统(9) (并发-----原子性/互斥临界区/生产者消费者问题/临界区问题三条件/互斥性/进展性/公平性)
  • Linux(centOS)的安全命令
  • 鸿蒙移动应用开发-------前篇
  • 泛微开发修炼之旅--52关于ecology首页待办修改源码位置记录
  • Windows Qt 6安装Oracle QOCI SQL Driver插件
  • No.24 笔记 | WEB安全 - 任意文件包含漏洞 part 6
  • Flutter使用share_plus是提示发现了重复的类
  • 为什么https先非对称加密,然后对称加密?
  • Conmi的正确答案——在Kibana中搜索Elasticsearch的索引