P1605 迷宫DFS优化

题目来源洛谷点这里
题目背景
给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

题目描述

输入格式
第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行为障碍点的坐标。

输出格式
给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方案总数。

输入输出样例
输入 #1复制
2 2 1
1 1 2 2
1 2
输出 #1复制
1
思路:将已经走过,障碍物和边界全部赋值为1,0为可以前行.就不需要开个book数组,也不需要判断越界.

#include<bits/stdc++.h>
using namespace std;
int N,M,T,SX,SY,FX,FY,ct;
int m[8][8];
int dx[4]={
   -1,0,0,1};
int dy[4]=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
矩阵迷宫是一个非常有趣的问题,可以通过深度优先搜索算法(DFS)来解决。下面是一个使用Python语言编写的矩阵迷宫DFS程序的设计思路。 首先,我们需要定义一个函数来判断某个位置是否可以作为下一步的移动目标。在矩阵迷宫中,我们通常用1表示可行路线,用0表示墙壁或不可行路线。因此,我们可以定义一个函数is_valid(row, col, maze),其中row和col分别表示当前位置的行和列,maze是迷宫的矩阵表示。在这个函数中,我们可以判断当前位置是否越界或者是墙壁,如果满足这些条件,则说明不可行,返回False,否则返回True。 接下来,我们可以定义一个递归的函数dfs(row, col, maze, visited),其中row和col表示当前位置的行和列,maze是迷宫的矩阵表示,visited是一个与maze相同大小的矩阵,表示是否已经访问过。在这个函数中,我们首先判断当前位置是否是终点(例如迷宫的右下角),如果是,则找到了一条可行路径,返回True。如果当前位置不是终点,则标记当前位置为已访问,并依次判断当前位置的上、下、左、右四个方向是否可行。如果某个方向可行,我们可以将当前位置移动到该方向,并递归调用dfs函数。如果在某个方向上找到了一条可行路径,我们可以返回True,否则继续搜索其他方向。如果四个方向都不可行,我们可以将当前位置的visited标记为False,并返回False。 最后,我们可以定义一个主函数solve(maze),其中maze是迷宫的矩阵表示。在这个函数中,我们可以首先创建一个与maze相同大小的visited矩阵,并将所有元素初始化为False。接下来,我们调用dfs函数从迷宫的起点(例如迷宫的左上角)开始搜索,并将结果返回。 这样,我们就完成了一个使用深度优先搜索算法解决矩阵迷宫问题的程序。通过调用主函数,并传入迷宫矩阵作为参数,我们可以获得是否存在可行路径的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值