[搜索]DFS+BFS
来源:互联网 发布:2017淘宝手机店铺装修 编辑:程序博客网 时间:2024/05/22 17:06
从一道水题 看下基本思路
POJ 3620 DFS ver1.
#include<iostream>#include<queue>using namespace std;#define FRE freopen("in.txt","r",stdin)const int N = 110;int map[110][110];int xmove[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1};int n, m;int cnt, ans;int dfs(int x, int y){int i, Mx, My ,ans = 0;for(i=0;i<4;i++){Mx = x + xmove[i][0];My = y + xmove[i][1];if(Mx<0||My<0||Mx==n||My==m||map[Mx][My]==0)continue;//printf("%d %d\n", Mx, My);map[Mx][My] = 0;ans += dfs(Mx, My) + 1;}return ans;}int main(){//FRE;int k;scanf("%d%d%d", &n, &m, &k);int i, j, x, y;memset(map, 0, N*N*sizeof(int));for(i=0;i<k;i++){scanf("%d%d", &x, &y);map[x-1][y-1] = 1;}int res = 0;for(i=0;i<n;i++){for(j=0;j<m;j++)if(map[i][j]){map[i][j] = 0;res = max(dfs(i, j)+1, res);}}printf("%d\n", res);}
POJ 3620 DFS ver12
#include<iostream>#include<queue>using namespace std;#define FRE freopen("in.txt","r",stdin)const int N = 110;int map[110][110];int xmove[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1};int n, m;int cnt, ans;void dfs(int x, int y){int i, Mx, My;for(i=0;i<4;i++){Mx = x + xmove[i][0];My = y + xmove[i][1];if(Mx<0||My<0||Mx==n||My==m||map[Mx][My]==0)continue;//printf("%d %d\n", Mx, My);map[Mx][My] = 0;cnt++;dfs(Mx, My);}}int main(){//FRE;int k;scanf("%d%d%d", &n, &m, &k);int i, j, x, y;memset(map, 0, N*N*sizeof(int));for(i=0;i<k;i++){scanf("%d%d", &x, &y);map[x-1][y-1] = 1;}int res = 0;for(i=0;i<n;i++){for(j=0;j<m;j++)if(map[i][j]){cnt = 1;map[i][j] = 0;dfs(i, j);res = max(res, cnt);}}printf("%d\n", res);}
POJ 3626 BFS ver.
#include<iostream>using namespace std;#define FRE freopen("in.txt","r",stdin)const int N = 1010;int xmove[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1};int map[N][N];int que[N*N][2];int step[N][N];int Dx, Dy;int bfs(int x, int y){int i, front = 0, rear = 0, ans = 0;int Mx, My;map[x][y] = 0;que[rear][0] = x;que[rear][1] = y;bool find = false;while(front<=rear&&!find){for(i=0;i<4;i++){Mx = que[front][0] + xmove[i][0];My = que[front][1] + xmove[i][1];//printf("%d %d %d\n", Mx, My);if(Mx<0||My<0||Mx>1000||My>1000||map[Mx][My])continue;step[Mx][My] = step[que[front][0]][que[front][1]] + 1;if(Mx==Dx&&My==Dy){ans = step[Mx][My];find = true;}map[Mx][My] = 1;//printf("%d %d\n", Mx, My);rear++;que[rear][0] = Mx;que[rear][1] = My;}front++;//printf("queue:%d %d\n", front, rear);}return ans;}int main(){//FRE;int k;scanf("%d%d%d", &Dx, &Dy, &k);Dx += 500;Dy += 500;int i, j;memset(map, 0, N*N*sizeof(int));int x, y;for(i=0;i<k;i++){scanf("%d%d", &x, &y);map[x+500][y+500] = 1;}printf("%d\n", bfs(500, 500));}
- [搜索]DFS+BFS
- DFS、BFS搜索+题目
- DFS/BFS 搜索训练
- DFS BFS 搜索基础
- DFS BFS 搜索总结
- 搜索bfs/dfs
- 搜索 (bfs,dfs) 总结
- poj 3083 搜索 DFS,BFS
- 搜索问题:DFS 与 BFS
- poj3083 dfs+bfs搜索迷宫
- DFS 与BFS优先搜索
- 博弈搜索练习-BFS&DFS
- bfs和dfs搜索总结
- BFS和DFS优先搜索算法
- BFS和DFS优先搜索算法
- BFS和DFS优先搜索算法
- BFS和DFS优先搜索算法
- POJ1252 完全背包 dp 搜索 dfs bfs
- Java和.NET在开发中的不同盘点
- Detour3.0 win7 64bit下的安装
- mysql root密码忘了
- 逼迫自己
- OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect
- [搜索]DFS+BFS
- HDU 1813 Escape from Tetris IDA*搜索
- LWUIT引路蜂地图开发示例:本地查询
- python ihooks使用实例
- Qt——转战Java?
- 学习Joomla3--修改网页图标
- SAP作业类型应用简介
- 动态代理
- C++标准库和 STL 的关系