UVa11520-Fill the Square

来源:互联网 发布:淘宝平板客户端和手机 编辑:程序博客网 时间:2024/06/05 19:25

给定一个n*n的方阵要求往里面填充字符使得字典序最小。
暴力搜索,从上到下从左至右选择最小的字符填充即可。

#include <cstdio>char grid[12][12];int dx[4] = {-1, 0, 1, 0};int dy[4] = {0, 1, 0, -1};int n;void Dfs(int x, int y) {    if (y >= n) {        Dfs(x + 1, 0);        return;    }    if (x > n - 1) {        return;    }    if (grid[x][y] != '.') {        Dfs(x, y + 1);        return;    }    for (int i = 0; i < 26; i++) {        char ch = 'A' + i;        bool ok = true;        for (int j = 0; j < 4; j++) {            int nx = x + dx[j];            int ny = y + dy[j];            if (nx >= 0 && nx < n && ny >= 0 && ny < n) {                if (grid[nx][ny] == ch) {                    ok = false;                    break;                }            }        }        if (ok) {            grid[x][y] = ch;            Dfs(x, y + 1);            break;        }    }}int main(int argc, char const *argv[]) {    int T;    scanf("%d", &T);    for (int t = 1; t <= T; t++) {        scanf("%d", &n);        getchar();        for (int i = 0; i < n; i++) {            for (int j = 0; j < n; j++) {                scanf("%c", &grid[i][j]);            }            getchar();        }        Dfs(0, 0);        printf("Case %d:\n", t);        for (int i = 0; i < n; i++) {            for (int j = 0; j < n; j++) {                printf("%c", grid[i][j]);            }            putchar('\n');        }    }    return 0;}
0 0