注意一开始的位置初始化
#include <bits/stdc++.h>
using namespace std;
char a[1000][1000];
int R,S;
int dx[4]={-1,1,0,0};
int dy[4]={ 0,0,-1,1};
int mymax=0;
bool flag[100000];
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void search(int x,int y,int n){
if(n>R*S) return;
if(n>=mymax) mymax=n;
for(int i=0;i<=3;i++)
{
int newx=x+dx[i];
int newy=y+dy[i];
// cout << "nnewx"<<newx <<":" << "newy"<< newy<<endl;
// assert( a[newx][newy]==true );
if( newx>=1 && newx<=R && newy>=1 && newy<=S
&& flag[ a[newx][newy] ]==true)
{
flag[ a[newx][newy] ] = false;
search(newx,newy,n+1);
flag[ a[newx][newy] ] = true;
}
}
}
int main(int argc, char** argv) {
cin>>R>>S;
for(int i=1;i<=R;i++)
for(int j=1;j<=S;j++)
cin>> a[i][j];
// cout << a[1][1];
// cout << a[3][4];
//memset(flag ,1,sizeof(flag));
for(int i=0;i<=10000;i++) flag[i]=true;
flag[ a[1][1] ] =false;//注意初始化
search(1,1,1);
cout << mymax;
return 0;
}