洛谷P1605:迷宫

简介: 洛谷P1605:迷宫

深度优先搜索

题目描述

给定一个 N×M 方格的迷宫,迷宫里有 T 处障碍,障碍处不可通过。

在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。


输入格式

第一行为三个正整数 N ,M ,T,分别表示迷宫的长宽和障碍总数。

第二行为四个正整数 SX ,SY ,FX ,FY SX,SYSX,SY 代表起点坐标,FX,FYFX,FY 代表终点坐标。

接下来 T 行,每行两个正整数,表示障碍点的坐标。


输出格式

输出从起点坐标到终点坐标的方案总数。

输入输出样例

输入

2 2 1

1 1 2 2

1 2

输出

1

#include<iostream>
using namespace std;
int n, m, t, sx, sy, fx, fy;
int  vis[10][10]; //标记
int mp[10][10]; //障碍物位置
int ans = 0;
int xx[] = { 1,0,-1,0 };
int yy[] = { 0,-1,0,1 };
void dfs(int x, int y)
{
    if (x == fx && y == fy)
    {
        ans++;
        return;
    }
    for (int i = 0; i < 4; i++)
    {
        int dx = xx[i] + x;
        int dy = yy[i] + y;
        if (dx >= 1 && dx <= n && dy >= 1 && dy <= m && vis[dx][dy]==0 && mp[dx][dy]==0)
        {
            vis[dx][dy] = 1;
            dfs(dx, dy);
            vis[dx][dy] = 0;
        }
    }
}
int main()
{
    cin >> n >> m >> t >> sx >> sy >> fx >> fy;
    while (t--)
    {
        int a, b;
        cin >> a >> b;
        mp[a][b] = 1;
    }
    vis[sx][sy] = 1;
    dfs(sx, sy);
    cout << ans << endl;
    return 0;
}



目录
相关文章
|
6月前
【洛谷 P2089】烤鸡(深度优先搜索)
## 摘要: 猪猪Hanke的烤鸡问题要求找出所有配料组合,使得$10$种配料(每种$1$到$3$克)的总和等于给定美味程度$n$。输入为正整数$n$,输出为方案总数及所有符合条件的配料分配,按字典序排列。样例输入$11$,输出$10$种方案。代码采用递归搜索,先计数再打印方案。$n\leq5000$时保证数据覆盖。
33 0
|
2月前
acwing 1112 迷宫
acwing 1112 迷宫
15 0
|
2月前
acwing 1076 迷宫问题
acwing 1076 迷宫问题
14 0
|
7月前
|
算法 C语言
每日一题——迷宫问题(I)
每日一题——迷宫问题(I)
|
机器学习/深度学习
1215:迷宫
1215:迷宫
110 0
|
算法 定位技术 C++
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
简单的来说,算法就是用计算机程序代码来实现数学思想的一种方法。学习算法就是为了了解它们在计算机中如何演算,以及在当今的信息时代,它们是如何在各个层面上影响我们的日常生活的,从而提高我们的逻辑思维能力和处理实际问题的能力。善用算法、巧用算法,是培养程序设计逻辑的重中之重,许多实际的问题都可用多个可行的算法来解决, 但是要从中找出最优的解决算法却是一项挑战。
567 6
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
洛谷 P1141 01迷宫
洛谷 P1141 01迷宫
84 0
AcWing——方格迷宫(有点不一样的迷宫问题)
AcWing——方格迷宫(有点不一样的迷宫问题)
95 0