51Nod 1416 两点
2018-01-31 23:36
381 查看
深搜就行
注意判断条件
首先步数要>=3
然后从A点走到下一个点B的时候,B在走一下不不允许走到A
满足之后就是出现v[][]数组==1的时候,就存在环
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<map> #include<cmath> using namespace std; int n,m; char s[100][100]; int v[100][100]={0}; int fz[4][2]={1,0,-1,0,0,1,0,-1}; int flag=0; void dfs(int x,int y,int prox,int proy,int step){ if(flag) return; for(int i=0;i<4;i++){ int xx=x+fz[i][0]; int yy=y+fz[i][1]; if(v[xx][yy]==1){ if(xx!=prox||yy!=proy){ if(step>=3){ flag=1; return ; } } } if(xx>=0&&xx<n&&yy>=0&&yy<m&&v[xx][yy]==0&&s[xx][yy]==s[x][y]){ v[xx][yy]=1; dfs(xx,yy,x,y,step+1); v[xx][yy]=0; } } } int main(){ while(scanf("%d%d",&n,&m)!=EOF){ flag=0; for(int i=0;i<n;i++) scanf("%s",s[i]); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(v[i][j]==0){ v[i][j]=1; dfs(i,j,0,0,0); v[i][j]=0; } } } if(flag) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
相关文章推荐
- 51nod 1416 两点【并查集】
- 51NOD 1416 两点
- 51nod 1416 两点
- 51Nod - 1416 两点(搜索)
- 51Nod -1416 两点(dfs)
- 51nod 1416 两点(DFS)
- 1416 两点 51NOD
- 51nod 1416 两点
- 51Nod - 1416 两点
- 51nod 1416两点DFS
- 51nod 1416:两点 深搜
- 51nod 1416:两点 深搜
- 51NOD 1416 两点 【水】DFS
- 51nod 1416 两点 (dfs)
- 51nod 1416 两点 【dfs+特殊判断】
- 51Nod - 1416 深度优先搜索
- 51nod 1416【DFS】
- 51Nod - 1416 搜索环
- 1416 两点(dfs)
- 两点(51nod 1416)