单人游戏,R行S列的棋盘,一个棋子,每个位置标识有大写字母。棋子开始时在最左上角,移动时同一个字母只能访问一次,求最多能移动多少次。
#include <iostream>
using namespace std;
int n,m;
char da[21][21];
int hs[26];
int ax[4]={0,0,1,-1};
int ay[4]={1,-1,0,0};
int maxt=0;
void bsf(int x,int y,int d)
{
d++;
if(hs[da[x][y]-'A']==1)
{
d--;
return;
}else if(hs[da[x][y]-'A']==0)
{
hs[da[x][y]-'A']=1;
}
maxt=max(d,maxt);
for(int i=0;i<4;i++)
{
int tx,ty;
tx=x+ax[i];
ty=y+ay[i];
if((tx>=0)&&(tx<n)&&(ty>=0)&&(ty<m))
{
bsf(tx,ty,d);
}
}
hs[da[x][y]-'A']=0;
d--;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>da[i][j];
}
}
/*
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<da[i][j];
}
cout<<endl;
}*/
bsf(0,0,0);
cout<<maxt<<endl;
return 0;
}