AcWing 1111. 字母
原题链接
简单
作者:
Money_How
,
2024-06-11 12:17:12
,
所有人可见
,
阅读 2
#include<iostream>
#include<map>
using namespace std;
const int N = 31;
int dx[4] = {0,-1,0,1},dy[4] = {1,0,-1,0};
char ch[N][N];
map<char,int> ma;
int n,m,res,q[N][N];
void dfs(int x,int y)
{
for(int i = 0;i<4;i++)
{
int xx = x+dx[i],yy = y+dy[i];
if(xx<=0||yy<=0||xx>n||yy>m||ma[ch[xx][yy]]) continue;
ma[ch[xx][yy]] = 1; //将走过的字母通过map来记录
q[xx][yy] = q[x][y]+1; //记录走过点的数量
res = max(res,q[xx][yy]); //取能走到的最大值
dfs(xx,yy);
q[xx][yy] = 0;
ma[ch[xx][yy]] = 0; //还原现场
}
}
int main()
{
cin>>n>>m;
for(int i = 1;i<=n;i++)
for(int j = 1;j<=m;j++)
cin>>ch[i][j];
q[1][1] = 1; //因为从左上角开始走 所以将计数器调为1
ma[ch[1][1]] = 1;
dfs(1,1);
cout<<res;
return 0;
}