洛谷 P1605 迷宫(超简单迷宫)(dfs)

题源:迷宫
可能属于普及-组的题才能给我安慰吧…

题目:

题目背景
迷宫 【问题描述】

给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和

终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫

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

输入样例 输出样例

【数据规模】

1≤N,M≤5

题目描述
输入输出格式
输入格式:
【输入】

第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点

坐标FX,FY。接下来T行,每行为障碍点的坐标。

输出格式:
【输出】

给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方

案总数。

输入输出样例
输入样例#1:
2 2 1
1 1 2 2
1 2
输出样例#1:
1
题解:之前写过关于迷宫的题解了,再写一遍吧,加深一下印象;
首先,先把地图描绘出来,用mapp[][]二维数组吧;然后把有障碍的地方标记一下,同时也要把起点给标记一下(标记起点很重要);然后按照常规来,从起点坐标开始向四周进行dfs,并且判断是否能走或者坐标是否越界!

AC代码:

#include <bits/stdc++.h>

using namespace std;
const int mod=1e10+7;
typedef long long int ll;
int N,M,Sx,Sy,Fx,Fy,Px,Py;
int mapp[7][7];
int cot,pst;
int dist[4][2]={1,0,-1,0,0,1,0,-1};
void dfs(int x,int y)
{
    if(x==Fx&&y==Fy)
    {
        cot++;
        return ;
    }
    for(int i=0;i<4;i++)
    {
        int xx=x+dist[i][0];
        int yy=y+dist[i][1];
        if(!mapp[xx][yy]&&xx>=1&&xx<=N&&yy>=1&&yy<=M)
        {
            mapp[xx][yy]=1;
            dfs(xx,yy);
            mapp[xx][yy]=0;
        }
    }
}
int main()
{
    cin >>N>>M>>pst;
    memset(mapp,0,sizeof(mapp));
    cin >>Sx>>Sy;
    cin >>Fx>>Fy;
    mapp[Sx][Sy]=1;
    for(int i=1;i<=pst;i++)
    {
        cin >>Px>>Py;
        mapp[Px][Py]=1;
    }
    dfs(Sx,Sy);
    cout <<cot<<endl;
    return 0;
}

偶尔刷刷水题在繁忙的复习中也不失为一个很不错的选择;

最近在看一部韩剧吧,《请回答1988》,里面的邻里之间的亲情,家人之间的亲情实在是让人感动,珍惜每一天,珍惜每一个人,加油!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值