题解报告:P1141 01迷宫(BFS好题+并查集)

简介: 算法

机票


题意:

17.png

思路:

首先发现其实就是求连通块,如果是bfs做,明确每次去搜索会t,那么就要存个每个连通块的答案然后再输出,又要想好如果都不连通的情况得开1e6的数组,细节超多的一勾八题。

#include<bits/stdc++.>
using namespace std;
const int maxn=1005;
queue<pair<int ,int >>mo;
int n;
int a[maxn][maxn];
int ans[maxn][maxn];
int anss[maxn*maxn];
bool flag[maxn][maxn];
int dy[5]={0,1,-1,0,0};
int dx[5]={0,0,0,1,-1};
bool jg(int x,int y){
     if(flag[x][y]==0&&x>=1&&x<=n&&y>=1&&y<=n){
        return true;
     }
     return false;
}
int main()
{
    int m,i,j,d=0;
    cin>>n>>m;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            scanf("%1d",&a[i][j]);
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            if(flag[i][j]==0){
                int cnt=0;
                mo.push(make_pair(i,j));
                flag[i][j]=1;
                while(!mo.empty()){
                    int xx=mo.front().first,yy=mo.front().second;
                    ans[xx][yy]=d;
                    mo.pop();
                    for(int z=1;z<=4;z++){
                        int xz=xx+dx[z],xy=yy+dy[z];
                        if(jg(xz,xy)&&a[xz][xy]!=a[xx][yy]){
                                flag[xz][xy]=1;
                                mo.push(make_pair(xz,xy));
                                cnt++;
                        }
                    }
                }
                anss[d++]=cnt+1;
            }
        }
    }
    for(i=0;i<m;i++){
        int xxx,yyy;
        cin>>xxx>>yyy;
        cout<<anss[ans[xxx][yyy]]<<endl;
    }
}


相关文章
|
5月前
【洛谷 P2089】烤鸡(深度优先搜索)
## 摘要: 猪猪Hanke的烤鸡问题要求找出所有配料组合,使得$10$种配料(每种$1$到$3$克)的总和等于给定美味程度$n$。输入为正整数$n$,输出为方案总数及所有符合条件的配料分配,按字典序排列。样例输入$11$,输出$10$种方案。代码采用递归搜索,先计数再打印方案。$n\leq5000$时保证数据覆盖。
30 0
|
5月前
【洛谷 P1443】马的遍历 题解(广度优先搜索)
该问题是一个棋盘上的马的最短路径问题。给定一个$n\times m$的棋盘和起点$(x, y)$,需要计算马到达棋盘上每个位置的最短步数。输入包含$n, m, x, y$,输出是一个矩阵,表示各位置的步数或未可达的$-1$。使用广度优先搜索(BFS)策略,从起点开始遍历,直到访问完所有可达位置。代码中定义了太阳数组表示马的移动方向,并通过队列实现BFS。最后输出格式要求每个数字左对齐且域宽为5。
35 0
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
|
机器学习/深度学习 算法 定位技术
【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(15)
【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(15)
110 0
|
存储 算法
【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(14)
【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(14)
103 0
|
6月前
|
算法 C++
一题带你写出图论算法模板!!!
一题带你写出图论算法模板!!!
|
程序员 定位技术 C++
[蓝桥杯] 双指针、BFS和DFS与图论问题
本篇文章针对蓝桥杯比赛的考点,列出双指针、BFS和DFS与图论的相关习题以及知识点的解释。希望本篇文章会对你有所帮助。
86 0
|
算法 测试技术 C++
【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(13)
【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(13)
94 0
从三道leetcode掌握广度优先搜索(BFS)
前言 BFS和DFS是如影随形的两种搜索方式,我们在上篇文章从三道leetcode掌握深度优先搜索(DFS)学习了递归的概念及DFS。不熟悉递归及DFS的同学可以先看看上篇文章,再阅读本篇比较好。
|
存储
Leetcode-每日一题1210. 穿过迷宫的最少移动次数(BFS)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_46618592/article/details/128890280?spm=1001.2014.3001.5501
115 0
Leetcode-每日一题1210. 穿过迷宫的最少移动次数(BFS)