您的位置:首页 > 其它

poj 1154 LETTERS

2012-08-29 16:24 281 查看
#include <iostream>
#include <string>
using namespace std;
const int MAX = 25;
char matrix[MAX][MAX];
int r, s, ans;
bool vis[30];

void init()
{
int i, j;
for (i = 0; i < r; i++){
getchar();
for (j = 0; j < s; j++){
scanf("%c", &matrix[i][j]);
}
}

return ;
}

void DFS(int x, int y, int cnt)
{
if (x+1 < r && !vis[matrix[x+1][y] - 'A']){
vis[matrix[x+1][y] - 'A'] = 1;
cnt++;
DFS(x+1, y, cnt);
cnt--;
vis[matrix[x+1][y] - 'A'] = 0;
}
if (y+1 < s && !vis[matrix[x][y+1] - 'A']){
vis[matrix[x][y+1] - 'A'] = 1;
cnt++;
DFS(x, y+1, cnt);
cnt--;
vis[matrix[x][y+1] - 'A'] = 0;
}
if (x-1 >= 0 && !vis[matrix[x-1][y] - 'A']){
vis[matrix[x-1][y] - 'A'] = 1;
cnt++;
DFS(x-1, y, cnt);
cnt--;
vis[matrix[x-1][y] - 'A'] = 0;
}
if (y-1 >= 0 && !vis[matrix[x][y-1] - 'A']){
vis[matrix[x][y-1] - 'A'] = 1;
cnt++;
DFS(x, y-1, cnt);
cnt--;
vis[matrix[x][y-1] - 'A'] = 0;
}
if (cnt > ans){
ans = cnt;
return ;
}
}

int main()
{
while (scanf("%d%d", &r, &s) != EOF){
memset(vis, 0, sizeof(vis));
ans = 0;
init();
vis[matrix[0][0] - 'A'] = 1;
DFS(0, 0, 1);
cout << ans << endl;
}

system("pause");
}

/*
3 6
HFDFFB
AJHGDH
DGAGEH
5 5
ABAAA
BCAAA
CDERT
SDFGH
LLLLL
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: