博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1141 01迷宫【bfs】
阅读量:5329 次
发布时间:2019-06-14

本文共 1702 字,大约阅读时间需要 5 分钟。

题目链接

题意:

有一个填了0和1的n*n的格子,只能0走到1,1走到0

有m组询问(数据量是1e5),问某一个格子可以到达的格子数。

思路:

刚开始一直在想记忆化搜索。某一个格子走过了之后的格子数记下来,之后访问到的时候加上。

但是这样会重复的。比如(x,y)走到(i,j),他们能走到的格子是有交集的,并不是包含的关系。

应该要想到 连通块。

给定的这个图形成了若干的连通块。我们只需要预处理一下这些连通块,对于每次询问查询他对应的连通块的大小就行了。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 11 using namespace std;12 typedef pair
pr;13 14 int n, m;15 int mat[1005][1005];16 int dx[4] = { 1, -1, 0, 0};17 int dy[4] = { 0, 0, 1, -1};18 19 int id[1005][1005];20 int cnt[1000005];21 22 bool check(pr p)23 {24 int i = p.first, j = p.second;25 return (i > 0 && i <= n && j > 0 && j <= n);26 }27 28 void bfs(int i, int j, int k)29 {30 int c = 1;31 queue
que;32 pr st = make_pair(i, j);33 que.push(st);34 id[i][j] = k;35 while(!que.empty()){36 pr now = que.front();que.pop();37 for(int i = 0; i < 4; i++){38 pr tmp = make_pair(now.first + dx[i], now.second + dy[i]);39 if(check(tmp) && !id[tmp.first][tmp.second] && mat[tmp.first][tmp.second] ^ mat[now.first][now.second]){40 id[tmp.first][tmp.second] = k;41 que.push(tmp);42 c++;43 }44 }45 }46 cnt[k] = c;47 }48 49 int main()50 {51 scanf("%d%d", &n, &m);52 for(int i = 1; i <= n; i++){53 char s[1005];54 scanf("%s", s);55 for(int j = 1; j <= n; j++){56 mat[i][j] = s[j - 1] - '0';57 }58 }59 int now_id = 1;60 for(int i = 1; i <= n; i++){61 for(int j = 1; j <= n; j++){62 if(!id[i][j]){63 bfs(i, j, now_id);64 now_id++;65 }66 }67 }68 69 for(int i = 0; i < m; i++){70 int x, y;71 scanf("%d%d", &x, &y);72 printf("%d\n", cnt[id[x][y]]);73 }74 75 return 0;76 }

 

转载于:https://www.cnblogs.com/wyboooo/p/10354934.html

你可能感兴趣的文章
记字符编码与转义符的纠缠
查看>>
NEYC 2017 游记
查看>>
【BZOJ 3669】 [Noi2014]魔法森林 LCT维护动态最小生成树
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
对Python中yield的理解
查看>>
NailTech 公司网站制作思路
查看>>
Shiro权限控制框架
查看>>
java第六次作业
查看>>
vsftpd虚拟用户【公司系统部分享】
查看>>
盒子box在网页中居中的方法
查看>>
Python之旅Day14 JQuery部分
查看>>
二十一、 Memento 备忘录(行为型模式)
查看>>
python 3.X中打包二进制数据存储字符串出错原因分析
查看>>
core--线程池
查看>>
B+树介绍
查看>>
redux-effect
查看>>
Swift和OC混编
查看>>
深度学习文献阅读笔记(6)
查看>>
Android轻量级的开源缓存框架ASimpleCache
查看>>
他山之石:加载图片的一个小问题
查看>>