CodeForces 598D 【dfs+技巧省时】
来源:互联网 发布:java iterator 将int 编辑:程序博客网 时间:2024/06/03 23:50
代码:
/*dfs+技巧!因为相邻的点(.)他们都有相同数目的外面的*,所以他们对应的编号相同,编号相同对应的输出的*的个数也就相等了,然后可以在递归的过程中对其的编号数组进行赋值,并且标记访问过了,这样下次遇到它就不会重新递归找*的个数了!节省了时间! 就这样把所有的.周围的*求出来,需要哪个就输出哪个就行了! */#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int n,m,k;char a[1005][1005];int vis[1005][1005];int time[1005][1005];int num[1000005];int dfs_clock;int sum;int dx[4]={0,1,-1,0};int dy[4]={1,0,0,-1};int judge(int x,int y){return x>=0&&x<n&&y>=0&&y<m;}void dfs(int x,int y){vis[x][y]=1;time[x][y]=dfs_clock;for(int i=0;i<4;i++){int next_x=x+dx[i];int next_y=y+dy[i];if(!judge(next_x,next_y)||vis[next_x][next_y])continue;if(a[next_x][next_y]=='*'){sum++;}else{dfs(next_x,next_y);}}}int main(){scanf("%d%d%d",&n,&m,&k);for(int i=0;i<n;i++){scanf("%s",a[i]);}dfs_clock=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(a[i][j]=='.'&&!vis[i][j]){dfs_clock++;sum=0;dfs(i,j);num[dfs_clock]=sum;}}}while(k--){int sx,sy;scanf("%d%d",&sx,&sy);printf("%d\n",num[time[sx-1][sy-1]]);}return 0;}
0 0
- CodeForces 598D 【dfs+技巧省时】
- codeforces 598D dfs
- 【codeforces 723D 】 + DFS
- CodeForces 327D(DFS)
- Codeforces D. Wormhouse (dfs+剪枝)
- Codeforces 69D Dot(DFS)
- Codeforces #386 D dfs+bitset
- codeforces 723D(DFS)
- codeforces 375D dfs+模拟
- Codeforces 740D dfs+二分
- 【Codeforces 711 D D. Directed Roads】 + DFS
- Codeforces 598D Igor In the Museum 【DFS】
- Codeforces 598D Igor In the Museum (dfs)
- Codeforces 598D Igor In the Museum (DFS)
- CodeForces 598D-Igor In the Museum【DFS】
- CodeForces 598D Igor In the Museum【dfs】
- CodeForces 598D Igor In the Museum【dfs】
- CodeForces 598 D. Igor In the Museum(dfs)
- 关于自然数集N到素数集P的一个单射的三种构造
- Java开发文档的使用与Hashcode的入门(老鸟勿进)
- 【杭电-oj】-2016- 数据的交换输出(一组排序,一组存原值,再交换位置)
- HTML常用代码
- 线程池的原理和创建
- CodeForces 598D 【dfs+技巧省时】
- cookie 相关
- 使用spring webflow遇到的问题-3
- win7+vc6配置win32 gdi+
- opencv 简单的例子
- HDU 3903 Trigonometric Function
- org.springframework.beans.factory.CannotLoadBeanClassException
- HDU 5630:Rikka with Chess【规律】
- Hibernate映射集合属性