Codevs 1629 01迷宫
来源:互联网 发布:云雀知止的叫是母的吗 编辑:程序博客网 时间:2024/05/16 18:38
1629 01迷宫
时间限制: 1 s
空间限制: 256000 KB
题目等级 : 钻石 Diamond
题目描述 Description
有一个由01组成的n*n格迷宫,若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。那么对于给定的迷宫,询问从某一格开始能移动到多少格。
输入描述 Input Description
输入的第1行为两个正整数n,m。
下面n行,每行n个字符,字符只可能是0或者1,字符之间没有空格。
接下来m行,每行2个用空格分隔的正整数i,j,对应了迷宫中第i行第j列的一个0,询问从这一格开始能移动到多少格。
输出描述 Output Description
输出包括m行,对于每个询问输出答案。
样例输入 Sample Input
2 2
01
10
1 1
2 2
样例输出 Sample Output
4
4
数据范围及提示 Data Size & Hint
【样例说明】
所有格子互相可达。
【数据规模】
对于20%的数据,n≤10;
对于40%的数据,n≤50;
对于50%的数据,m≤5;
对于60%的数据,n≤100,m≤100;
对于100%的数据,n≤1000,m≤1000000。
/*bfs.因为是多次查询.so我们bfs把ans先记下来.其实就是找联通快.一开始没想到orz然后不会搜.扩展点的数量就是队列中元素的数量.*/#include<iostream>#include<cstdio>#include<queue>#include<cmath>#define MAXN 1001using namespace std;int n,m,f[MAXN][MAXN],tot;bool b[MAXN][MAXN],g[MAXN][MAXN];struct node{int x,y;}s[MAXN*MAXN];queue<node>q;int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar(); return x*f;}void bfs(int x,int y){ tot=0;b[x][y]=true; s[++tot].x=x,s[tot].y=y; node u; u.x=x,u.y=y; q.push(u); while(!q.empty()) { u=q.front();q.pop(); x=u.x,y=u.y; for(int i=-1;i<=1;i++) for(int j=-1;j<=1;j++) { if(fabs(i+j)==1) { if(x+i>=1&&x+i<=n&&y+j>=1&&y+j<=n &&!b[x+i][y+j]&&g[x][y]!=g[x+i][y+j]) { b[x+i][y+j]=true; s[++tot].x=x+i,s[tot].y=y+j; node v;v.x=x+i,v.y=y+j; q.push(v); } } } } for(int i=1;i<=tot;i++) f[s[i].x][s[i].y]=tot;}int main(){ int x,y; char ch; n=read();m=read(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>ch,g[i][j]=ch-48; while(m--) { x=read(),y=read(); if(f[x][y]) printf("%d\n",f[x][y]); else bfs(x,y),printf("%d\n",f[x][y]); } return 0;}
0 0
- Codevs 1629 01迷宫
- Codevs 1215 迷宫
- codevs 1215 迷宫
- CodeVS 1215 迷宫 题解
- codevs 1215 迷宫
- CodeVS 3344 迷宫 题解
- 【codevs 1215】迷宫
- Codevs 1215 迷宫 裸BFS
- Codevs 1215 迷宫(DFS)
- codevs 1215_迷宫_bfs
- Codevs 2855 游乐园的迷宫
- Codevs 1337 银行里的迷宫
- codevs 1337 银行里的迷宫
- Codevs 1337 银行里的迷宫
- codevs 1215 迷宫 广搜bfs 深搜dfs
- 01迷宫
- 01迷宫
- 01迷宫
- Java总结篇系列:Java多线程(一)
- MySQL之——主从复制的一些参数配置
- scrapy爬去过程遇到的问题的解决办法
- 一种IC验证装置或/和IC测试装置STE_V2.3
- 双链表
- Codevs 1629 01迷宫
- python中的类方法和静态方法
- 写一个函数返回参数二进制中1的个数
- Java总结篇系列:Java多线程(二)
- Referenced file contains errors (http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd)
- hdu5924 Mr. Frog’s Problem 打表找规律 国庆咸鱼
- UVA 1344 Tian Ji -- The Horse Racing(模拟)
- 数字货币发明者
- hdu 3530 Subsequence 单调队列