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;
}

  

猜你喜欢

转载自www.cnblogs.com/dai-jia-ye/p/9349320.html