深搜板子题,虽然一开始用广搜搜了半天.....(惭愧),你只要一直去搜就好了,并判重,还有如果这个字母走过那相同的字母就不能在走了,这是一个坑点....
代码:
#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; }