|
> 一番外側の全ての+を起点として、再帰で処理するのが定石かと。
これに従ってプログラムを書いてみると、
#include <stdio.h>
#define N 100
char a[N][N]; unsigned int n;
void try(unsigned int i, unsigned int j)
{
if (i < n && j < n && a[i][j] == '+')
a[i][j] = '-', try(i-1,j), try(i+1,j), try(i,j-1), try(i,j+1);
}
int main(void)
{
unsigned int i, j;
if (scanf("%u", &n) != 1 && n > N) return 1;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (scanf(" %c", &a[i][j]) != 1) return 1;
for (i = 0; i < n; i++)
try(0, i), try(n-1, i), try(i, 0), try(i, n-1);
printf("%u\n", n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
putchar(a[i][j]);
putchar('\n');
}
return 0;
}
|