题目链接
求的是经过不同字母的最大路径,不是连通块的最大字母数。
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int INF=0x3f3f3f3f;
int n,m;
char a[300][300];
bool vis[300];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int ans;
void dfs(int x,int y,int step){
ans=max(ans,step);
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=0&&nx<n&&ny>=0&&ny<m&&vis[a[nx][ny]]==0){
vis[a[nx][ny]]=1;
dfs(nx,ny,step+1);
vis[a[nx][ny]]=0;
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
vis[a[0][0]]=1;
dfs(0,0,1);
cout<<ans<<endl;
return 0;
}