棋盘行走

解题思路
不是我说,这道题数据是真的水,近似于DFS模板题。
code
#include<iostream>
#include<cstdio>
using namespace std;
const int xn[5]={0,0,1,0,-1};
const int yn[5]={0,1,0,-1,0};
int n,m;
int map[60][60];
int b[60][60];
int dfs(int x,int y,int s,int starx,int stary)
{
if(x==starx&&y==stary&&s>=4)
return 1;
for(int i=1;i<=4;i++)
{
int xx=x+xn[i];
int yy=y+yn[i];
if(xx>0&&xx<=n&&yy>0&&yy<=m&&map[xx][yy]==map[x][y]&&!b[xx][yy])
{
b[xx][yy]=1;
if(dfs(xx,yy,s+1,starx,stary))
return 1;
b[xx][yy]=0;
}
}
return 0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
char a;
cin>>a;
map[i][j]=a-'A'+1;
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(dfs(i,j,1,i,j))
{
cout<<"Yes"<<endl;
return 0;
}
cout<<"No"<<endl;
return 0;
}
本文介绍了棋盘行走问题的解题思路,强调题目数据简单,接近深度优先搜索(DFS)模板题。

被折叠的 条评论
为什么被折叠?



