| 题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
|---|---|---|---|---|---|
| Fox And Two Dots | ★☆☆☆☆ | 答案正确 | 100 | 2015-02-25 17:40:14 | mn打反(23) |
找出n*m地图上能形成至少四个点不重回路的路线。
dfs,找一个数组记录每个点的深度以保证至少四个点不重。
| 510B.cpp代码已折叠
展开折叠内容
|
|---|
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<bitset>
#include<set>
#include<sstream>
using namespace std;
#define llu unsigned long long
#define lld long long
#define ci const lld&
#define si(n) scanf("%lld",&n)
#define f0(i,n) for(lld i=0;i!=n;++i)
int track[60][60]={},sx[4]={1,0,-1,0},sy[4]={0,1,0,-1};
lld n,m;
string s[60]={};
void dfs(ci x,ci y,ci deep,const char& c)
{
if(x<0||y<0||x>=n||y>=m)return;
if(s[x][y]!=c)return;
//cout<<x<<" "<<y<<" "<<deep<<endl;
if(track[x][y]&&deep-track[x][y]>=4)
{
cout<<"Yes";
exit(0);
}
if(track[x][y])return;
track[x][y]=deep;
f0(i,4)
dfs(x+sx[i],y+sy[i],deep+1,c);
}
int main()
{
si(n);si(m);
f0(i,n)cin>>s[i];
f0(i,n)f0(j,m)//fixed:n->m//
{
memset(track,0,sizeof(track));
dfs(i,j,1,s[i][j]);
}
cout<<"No";
exit(0);
}
|