美文网首页
2020-03-10(洛谷P1141 01迷宫)

2020-03-10(洛谷P1141 01迷宫)

作者: V_6619 | 来源:发表于2020-03-10 15:34 被阅读0次

写到吐血的一道题,其实就是再dfs上加了一个优化,变成了联通快,也可以叫做记忆化搜索;
1. 如果当前的点不属于任何一个连通块,就把这个点当做新的连通块的起点,dfs,寻找他能到达的最多块数, 并且把和他相连所有点都映射到该点处。
2.如果当前的点被搜索过,就说明他一定在一个联通块中,就把这个连通块的起始位置找到,输出数量即可。

#include <cstdio>
#include <iostream>
#include <cstring>
 using namespace std;

const int N = 1010;
int n, m;
char g[N][N];
bool st[N][N];
int asw;
int liantong[N][N];
int liantong_x[N][N];
int liantong_y[N][N];



//queue<PII> q;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};

int dfs(int x, int y,int startx, int starty)
{
    asw ++;
    st[x][y] = true;
    liantong_x[x][y] =  startx,
    liantong_y[x][y] = starty;
            for(int i=0; i<4; i++)
        {
            int xx = x + dx[i];   int yy = y + dy[i];
            if(!st[xx][yy] && g[xx][yy] != g[x][y] && xx >= 0 && xx < n && yy >= 0 && yy < n) 
              {
                dfs(xx, yy, startx, starty);
              }
        }

    return asw;
 } 

 int main()
 {
    scanf("%d%d", &n, &m);
//  string s;
    for(int i=0; i<n; i++)
    {
          scanf("%s", g[i]);
    }


         
    while(m--)
    {
//      memset(st, 0, sizeof(st));
//      memset(liantong_x, -1, sizeof(liantong_x));
//      memset(liantong_y, -1, sizeof(liantong_y));
        asw = 0;
        int a, b;
        scanf("%d%d", &a, &b);
        if(st[a-1][b-1]) cout<<liantong[liantong_x[a-1][b-1] ][liantong_y[a-1][b-1] ]<<endl;
        else 
        {

            liantong[a-1][b-1] = dfs(a-1, b-1, a-1, b-1);

            cout<<liantong[a-1][b-1]<<endl;
         }
    }
 }

相关文章

  • 2020-03-10(洛谷P1141 01迷宫)

    写到吐血的一道题,其实就是再dfs上加了一个优化,变成了联通快,也可以叫做记忆化搜索;1. 如果当前的点不属于任何...

  • 洛谷P1141 01迷宫 题解

    一条搜索水题,竟然交了10次才a...还是太菜了,怒献一篇题解,思路是记忆化dfs+剪枝。先看一下题目:(截图拼接...

  • 【洛谷 P1605】迷宫

    迷宫(题目链接) 思路 简单的深搜问题 代码

  • 【洛谷】P1605 - 迷宫

  • 洛谷计划

    洛谷是IT生认可度较高的一个网站,有各种题目以及专业术语,是刷题的一个好地方,但是对基础要求还算挺高,因此需要在...

  • 01 洛谷 P2010 回文日期

    题目链接 题目不难,但是由于粗心大意提交了3次才完全正确,记录下。 第一次错误: 判断日期合法性错误: 只考虑了月...

  • 几个高精度模板

    模板来自洛谷及Acwing:Acwing洛谷 后续增加注释以及相关代码改进 高精度加法 高精度减法 高精度乘法 高...

  • 洛谷新手题

    今天只是做了一个简单的顺序与分支题,知识点也很常见,只截图题目和代码了~

  • P1000 超级玛丽游戏

    【题目背景】 本题是洛谷的试机题目,可以帮助了解洛谷的使用。 建议完成本题目后继续尝试P1001、P1008。 【...

  • 洛谷P1219八皇后-dfs

    题目传送:洛谷P1219八皇后 dfs

网友评论

      本文标题:2020-03-10(洛谷P1141 01迷宫)

      本文链接:https://www.haomeiwen.com/subject/jugwdhtx.html