uva 657(dfs)
2014-07-26 19:32
253 查看
题解:用两个dfs嵌套,先找到 * 然后开始搜索 X ,每访问到一个 X 就用 * 替换,然后把找到的 * 用 . 来替换。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 55;
int row, col, flag[3] = {-1, 0, 1}, ans
, k;
char str
;
void init() {
memset(ans, 0, sizeof(ans));
memset(str, 0, sizeof(str));
k = 0;
}
void dfs1(int x, int y) {
str[x][y] = '*';
int x0, y0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
if ((i == 0 && j == 2) || (i == 2 && j == 0) || (i == 0 && j == 0) || (i == 2 && j == 2))
continue;
x0 = x + flag[i];
y0 = y + flag[j];
if (x0 < 0 || x0 >= row || y0 < 0 || y0 >= col)
continue;
if (str[x0][y0] == 'X') {
dfs1(x0, y0);
}
}
}
void dfs(int x, int y) {
str[x][y] = '.';
int x0, y0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
if ((i == 0 && j == 2) || (i == 2 && j == 0) || (i == 2 && j == 2) || (i == 0 && j == 0))
continue;
x0 = x + flag[i];
y0 = y + flag[j];
if (x0 < 0 || x0 >= row || y0 < 0 || y0 >= col)
continue;
if (str[x0][y0] == 'X') {
dfs1(x0, y0);
ans[k]++;
}
if (str[x0][y0] == '*')
dfs(x0, y0);
}
}
int main() {
int t = 1;
while (scanf("%d%d", &col, &row) && (row || col)) {
init();
for (int i = 0; i < row; i++)
scanf("%s", str[i]);
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
if (str[i][j] == '*') {
dfs(i, j);
k++;
}
sort(ans, ans + k);
printf("Throw %d\n", t++);
for (int i = 0; i < k - 1; i++)
printf("%d ", ans[i]);
printf("%d\n\n", ans[k - 1]);
}
return 0;
}
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 55;
int row, col, flag[3] = {-1, 0, 1}, ans
, k;
char str
;
void init() {
memset(ans, 0, sizeof(ans));
memset(str, 0, sizeof(str));
k = 0;
}
void dfs1(int x, int y) {
str[x][y] = '*';
int x0, y0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
if ((i == 0 && j == 2) || (i == 2 && j == 0) || (i == 0 && j == 0) || (i == 2 && j == 2))
continue;
x0 = x + flag[i];
y0 = y + flag[j];
if (x0 < 0 || x0 >= row || y0 < 0 || y0 >= col)
continue;
if (str[x0][y0] == 'X') {
dfs1(x0, y0);
}
}
}
void dfs(int x, int y) {
str[x][y] = '.';
int x0, y0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
if ((i == 0 && j == 2) || (i == 2 && j == 0) || (i == 2 && j == 2) || (i == 0 && j == 0))
continue;
x0 = x + flag[i];
y0 = y + flag[j];
if (x0 < 0 || x0 >= row || y0 < 0 || y0 >= col)
continue;
if (str[x0][y0] == 'X') {
dfs1(x0, y0);
ans[k]++;
}
if (str[x0][y0] == '*')
dfs(x0, y0);
}
}
int main() {
int t = 1;
while (scanf("%d%d", &col, &row) && (row || col)) {
init();
for (int i = 0; i < row; i++)
scanf("%s", str[i]);
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
if (str[i][j] == '*') {
dfs(i, j);
k++;
}
sort(ans, ans + k);
printf("Throw %d\n", t++);
for (int i = 0; i < k - 1; i++)
printf("%d ", ans[i]);
printf("%d\n\n", ans[k - 1]);
}
return 0;
}
相关文章推荐
- UVA - 657 - The die is cast (两次DFS!!)
- UVA 657-The die is cast(dfs*2)
- uva 657 The die in cast (掷骰子) —— DFS
- UVa-657 The die is cast(dfs嵌套)
- UVA - 657 The die is cast(二重dfs)
- UVA 657 The die is cast (DFS*2)
- uva 657 The die is cast(DFS遍历图)
- UVa 657 The die is cast(DFS)
- UVA 657 The die is cast ——bfs+dfs
- UVa657 The die is cast(DFS)
- UVA 572(简单的dfs)
- UVA 10285(DFS)
- uva572--oil deposits--dfs算法
- (UVa 10054)The Necklace --欧拉回路的判断和输出,DFS
- UVA - 11181 Probability|Given(条件概率+dfs枚举组合)
- UVa 572 Oil Deposits(DFS求8连通块)
- uva 11218 KTV(DFS+回溯)
- uva657 The die is cast(搜索)
- uva--539+简单dfs
- uva 10562 DFS