poj 1154 LETTERS
来源:互联网 发布:域名注册是什么 编辑:程序博客网 时间:2024/05/23 19:53
#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 6HFDFFBAJHGDHDGAGEH5 5ABAAABCAAACDERTSDFGHLLLLL*/