简单搜索。
1 /* hdoj 1987 */ 2 #include3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 char s[505];10 char map[25][25];11 bool visit[25][25];12 int n, m, len;13 int dir[4][2] = {14 0,1, 1,0, 0,-1, -1,015 }; // right down left up16 17 bool check(int x, int y) {18 return x<0 || x>=n || y<0 || y>=m;19 }20 21 void solve() {22 int i, j, k, tmp;23 int d = 0;24 int t = n*m/5;25 int x, y, xx, yy;26 27 len = 0;28 memset(visit, false, sizeof(visit));29 30 x = 0, y = -1;31 while (t--) {32 k = 5;33 tmp = 0;34 while (k) {35 xx = x + dir[d][0];36 yy = y + dir[d][1];37 if (check(xx, yy) || visit[xx][yy]) {38 d = (d+1) & 3;39 continue;40 }41 visit[xx][yy] = true;42 tmp = (tmp<<1) + map[xx][yy]-'0';43 --k;44 x = xx;45 y = yy;46 }47 if (tmp == 0)48 s[len++] = ' ';49 else50 s[len++] = tmp + 'A' - 1;51 }52 }53 54 int main() {55 int t, tt;56 int i, j, k;57 58 #ifndef ONLINE_JUDGE59 freopen("data.in", "r", stdin);60 #endif61 62 scanf("%d", &t);63 for (tt=1; tt<=t; ++tt) {64 scanf("%d %d %s", &n, &m, s);65 k = 0;66 for (i=0; i