#include<bits/stdc++.h>
using namespace std;
char mp[25][25];
int n,m,ans,vist[4][2]={-1,0,0,-1,0,1,1,0};
bool st[30];//0-->A st[字母-'A']
void dfs(int x,int y,int cnt){
//隐藏出口
if(ans<cnt) ans=cnt;//用ans记录出现过的最长路径
for(int i=0;i<4;i++)//遍历4个方向
{
int tx=x+vist[i][0],ty=y+vist[i][1];
//tx ty表示由x y可以到达的点
//没越界、没走过的字母
if(tx>=1&&tx<=n&&ty>=1&&ty<=m && st[ mp[tx][ty]-'A' ]==0){
st[ mp[tx][ty]-'A' ]=1;//进入一个坐标之前,保存现场
dfs(tx,ty,cnt+1);
st[ mp[tx][ty]-'A' ]=0;//回溯:还原现场
}
}
//return;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>mp[i][j];
st[mp[1][1]-'A']=1;//标记起点字母
dfs(1,1,1);//坐标 点的个数
cout<<ans<<endl;
return 0;
}
1212:LETTERS
最新推荐文章于 2024-07-15 22:10:26 发布