51Nod - 1416 深度优先搜索
2017-05-11 00:53
246 查看
这道题是让你判断给定的地图中相同元素能否形成一个环
《----------------------------------------------------------思路-----------------------------------------------------------》
既然是判断是否形成回路 深搜比较合适 方法一是酱紫的: 可以对每一个点都跑一发dfs 需要注意的地方是dfs的终止条件 碰到与当前元素相同并且之前走过的点(idx)则停止;
提供一个方法二的思路 也能过 可能在实现上没有一简单 是酱紫的 最小环的大小为四(可以理解为深搜的层数或者步数)所以可以用常规的vis数组标记是否做过当前点 然后每走四步都恢复第一部中的标记 如果有一天走到了出发的点 就是有环了 这种方法需要记录路径和初始点;
《----------------------------------------------------------思路-----------------------------------------------------------》
既然是判断是否形成回路 深搜比较合适 方法一是酱紫的: 可以对每一个点都跑一发dfs 需要注意的地方是dfs的终止条件 碰到与当前元素相同并且之前走过的点(idx)则停止;
提供一个方法二的思路 也能过 可能在实现上没有一简单 是酱紫的 最小环的大小为四(可以理解为深搜的层数或者步数)所以可以用常规的vis数组标记是否做过当前点 然后每走四步都恢复第一部中的标记 如果有一天走到了出发的点 就是有环了 这种方法需要记录路径和初始点;
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define lson l,m,rt << 1 #define rson m+1,r,rt << 1 | 1 using namespace std; int n, m; char mapp[55][55]; int idx[55][55]; int flag; void dfs(int x,int y,char op,int fromx,int fromy) { if(flag)return ; int move[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; for(int i = 0; i < 4; i ++) { int xx = x + move[i][0]; int yy = y + move[i][1]; if(xx >= 0 && xx < n && yy >=0 && yy < m ) { if(fromx == xx && fromy == yy)continue; if(mapp[xx][yy] != op)continue; if(mapp[xx][yy] == op && idx[xx][yy]) { // cout<<xx<<" " <<yy<<"haha"<<endl; flag = 1;return ; } idx[xx][yy] = 1; dfs(xx , yy, op, x, y); idx[xx][yy] = 0; } } } int main() { while(~scanf("%d%d",&n,&m)) { for (int i = 0; i < n; i ++) { scanf("%s",mapp[i]); } flag = 0; for(int i = 0; i < n; i ++) { for(int j = 0; j < m; j ++) { memset(idx,0,sizeof(idx)); dfs(i,j,mapp[i][j],-1,-1); if(flag)break; // cout<<"haha"; } if(flag)break; } if(flag)cout<<"Yes"<<endl; else cout<<"No"<<endl; } }
相关文章推荐
- POJ 1979 深度优先搜索
- 通信网络 ccf 深度优先搜索
- 广度优先搜索二叉树,并返回节点深度
- 深度优先搜索:能否走出迷宫
- 挑战程序设计竞赛里面的几道深度优先搜索
- Sticks POJ1011 hdu1455 (深度优先搜索DFS)
- 深度优先搜索集合的所有组合的一半 [优化][笔记]
- 广度优先搜索与深度优先搜索的 java 实现
- dfs深度优先搜索
- 图的创建、广度优先搜索、深度优先搜索
- 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法
- 深度优先搜索
- 深度优先搜索和广度优先搜索
- 【算法学习】二、深度优先搜索与广度优先搜索
- 深度优先搜索——八皇后问题
- 简单深度优先搜索
- 深度优先搜索——一笔画问题(欧拉图问题)
- 面试题常见算法之图的广度优先搜索和深度优先搜索
- nyoj 部分和问题(深度优先搜索DFS)
- 深度优先搜索--以及图的基本操作