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

  

posted on 2011-07-22 19:59  sysu_mjc  阅读(141)  评论(0编辑  收藏  举报

导航