您的位置:首页 > 其它

UVa11520-Fill the Square

2016-09-28 19:36 295 查看
给定一个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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: