1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| #include <iostream> #include <cstring> #include <vector> using namespace std; int n,m; int g[35][35],has[30]; char mapc[35][35]; struct node { int l_x,l_y; int r_x,r_y; void inintlize(){ l_x = 100;l_y = 100; r_x = -1; r_y = -1; } }e[30]; void init() { memset(g,0,sizeof g); memset(has, 0, sizeof has); for (int i=0; i<26; i++) e[i].inintlize(); for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { cin >> mapc[i][j]; if ( isalpha(mapc[i][j]) ) { int cur = mapc[i][j] - 'A'; if ( !has[cur] ) has[cur] = 1; e[cur].l_x = min(e[cur].l_x , i); e[cur].l_y = min(e[cur].l_y , j); e[cur].r_x = max(e[cur].r_x , i); e[cur].r_y = max(e[cur].r_y , j); } } } for (int cur = 0; cur<26; cur++) { if ( has[cur] ) { for (int i=e[cur].l_x; i<=e[cur].r_x; i++) { int v1 = mapc[i][e[cur].l_y] - 'A'; int v2 = mapc[i][e[cur].r_y] - 'A'; if ( v1!= cur ) g[cur][v1] =1; if ( v2!= cur ) g[cur][v2] =1; } for (int j=e[cur].l_y; j<=e[cur].r_y; j++) { int v1 = mapc[e[cur].l_x][j] - 'A'; int v2 = mapc[e[cur].r_x][j] - 'A'; if ( v1 != cur ) g[cur][v1] = 1; if ( v2 != cur ) g[cur][v2] = 1; } } } } int ans[30],sum,vis[30]; vector<int> alp;
int dfs(int num) { if ( num == sum ) { for (int i=0; i<sum; i++) printf("%c",ans[i]+'A'); printf("\n"); } for (int i=0; i<sum; i++) { if ( !vis[alp[i]] ) { bool flag = true; for (int j=0; j<num; j++) if (g[alp[i]][ans[j]]) flag = false; if ( flag ) { ans[num] = alp[i]; vis[alp[i]] = 1; dfs(num+1); vis[alp[i]] = 0; } } } return 0; }
void go() { alp.clear(); for (int i=0; i<26; i++) if (has[i]) alp.push_back(i); sum = alp.size(); memset(vis,0,sizeof vis); for (int i=0; i<sum; i++) { ans[0] = alp[i]; vis[alp[i]] = 1; dfs(1); vis[alp[i]] = 0; } } int main() { freopen("a.txt","r",stdin); while ( scanf("%d%d",&n,&m) != EOF ) { init(); go(); } return 0; }
|