zoukankan      html  css  js  c++  java
  • 洛谷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

    AC代码

    注意要对起点也进行标记,否则只能拿到70分
    不对起点进行标记的被卡的数据:

    2 2 0
    1 1 1 2
    
    #include<bits/stdc++.h>
    #define ll long long
    #define ms(a,b) memset(a,b,sizeof(a))
    #define INF 0x7f7f7f7f
    const int maxn=1e6+10;
    using namespace std;
    int mp[10][10];
    int vis[100][100];
    int dis[4][2]={1,0,-1,0,0,1,0,-1};
    int n,m,t;
    int ans;
    void dfs(int x,int y,int fx,int fy)
    {
        vis[x][y]=1;
        if(x==fx&&y==fy)
            ans++;
        for(int i=0;i<4;i++)
        {
            int dx=x+dis[i][0];
            int dy=y+dis[i][1];
            if(!vis[dx][dy]&&!mp[dx][dy]&&dx<=n&&dx>0&&dy<=m&&dy>0)
            {
                dfs(dx,dy,fx,fy);
                vis[dx][dy]=0;
            }
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>n>>m>>t;
        int sx,sy,fx,fy;
        cin>>sx>>sy>>fx>>fy;
        int zx,zy;
        for(int i=0;i<t;i++)
        {
            cin>>zx>>zy;
            mp[zx][zy]=1;
        }
        dfs(sx,sy,fx,fy);
        cout<<ans<<endl;
        return 0;
    }
    
  • 相关阅读:
    css重点章节复习—布局-边框-边距-浮动 (部分)
    (重点章节复习以及代码调整笔记)选择器:伪类和伪元素选择器(部分)
    css015 定位网页上的元素
    css014 响应式web设计
    3.MFC基础(三)消息映射
    2.MFC基础(二)窗口创建
    1.MFC基础(一)程序流程
    27.windows线程
    26.windows进程
    25.windows内存管理
  • 原文地址:https://www.cnblogs.com/Friends-A/p/10324324.html
Copyright © 2011-2022 走看看