poj 1154 LETTERS
#include<iostream> //dfs
using namespace std;
bool visited[26];
char board[100][100];
int r,s,n;
bool vis(int x,int y)
{
if(x<1||x>r||y<1||y>s)
return true;
return visited[board[x][y]-'A'];
}
void dfs(int x,int y,int num)
{
if(vis(x-1,y)&&vis(x+1,y)&&vis(x,y-1)&&vis(x,y+1))
{
n=max(num,n);
return ;
}
if(!vis(x-1,y))
{
visited[board[x-1][y]-'A']=1;
dfs(x-1,y,num+1);
visited[board[x-1][y]-'A']=0;
}
if(!vis(x+1,y))
{
visited[board[x+1][y]-'A']=1;
dfs(x+1,y,num+1);
visited[board[x+1][y]-'A']=0;
}
if(!vis(x,y-1))
{
visited[board[x][y-1]-'A']=1;
dfs(x,y-1,num+1);
visited[board[x][y-1]-'A']=0;
}
if(!vis(x,y+1))
{
visited[board[x][y+1]-'A']=1;
dfs(x,y+1,num+1);
visited[board[x][y+1]-'A']=0;
}
}
int main()
{
cin>>r>>s;
for(int i=1;i<=r;++i)
for(int j=1;j<=s;++j)
cin>>board[i][j];
visited[board[1][1]-'A']=1;
dfs(1,1,1);
cout<<n<<endl;
return 0;
}