LETTERS
深搜板子题,虽然一开始用广搜搜了半天.....(惭愧),你只要一直去搜就好了,并判重,还有如果这个字母走过那相同的字母就不能在走了,这是一个坑点....
代码:
#include<iostream>
#include<cstring>
using namespace std;
int b[1100][1100]={0};
char a[1100][1100];
int n,m;
int c[110000]={0};
int x1[4]={1,-1,0,0};
int y1[4]={0,0,1,-1};
int maxn=0;
void dfs(int x,int y,int sum)
{
maxn=max(maxn,sum);//去找最大值
for(int i=0;i<4;i++)
{
int x2=x+x1[i];//四个方向
int y2=y+y1[i];
if(x2>=0&&x2<n&&y2>=0&&y2<m&&b[x2][y2]==0&&c[a[x2][y2]-'A']==0)//判断走没走过
{
b[x2][y2]=1;
c[a[x2][y2]-'A']=1;
dfs(x2,y2,sum+1);
b[x2][y2]=0;//回溯
c[a[x2][y2]-'A']=0;
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
}
b[0][0]=1;//初始化
c[a[0][0]-'A']=1;
dfs(0,0,1);//搜索
cout<<maxn<<endl;
}

浙公网安备 33010602011771号