#include<stdio.h>
void paint(char p[100][100], int h, int k)
{
if(p[h+1][k]=='-'){
p[h+1][k]='+';
paint(p, h+1, k);
}
if(p[h-1][k]=='-'){
p[h-1][k]='+';
paint(p, h-1, k);
}
if(p[h][k+1]=='-'){
p[h][k+1]='+';
paint(p, h, k+1);
}
if(p[h][k-1]=='-'){
p[h][k-1]='+';
paint(p, h, k-1);
}
}
int main(void)
{
int n;
char p[100][100];
scanf("%d", &n);
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
scanf("%c", &p[i][j]);
}
}
int h, k;
scanf("%d %d", &h, &k);
p[h][k]='+';
paint(p, h, k);
for(int x=0; x<n; x++){
for(int y=0; y<n; y++){
printf("%c", p[x][y]);
}
printf("\n");
}
return 0;
}
遞迴真的好難
想問為什麼會全部變成+ 感恩
#include
void paint(char p[100][100], int h, int k)
{
if(p[h+1][k]=='-'){
p[h+1][k]='+';
paint(p, h+1, k);
}
if(p[h-1][k]=='-'){
p[h-1][k]='+';
paint(p, h-1, k);
}
if(p[h][k+1]=='-'){
p[h][k+1]='+';
paint(p, h, k+1);
}
if(p[h][k-1]=='-'){
p[h][k-1]='+';
paint(p, h, k-1);
}
}
int main(void)
{
int n;
char p[100][100];
scanf("%d", &n);
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
scanf("%c", &p[i][j]);
}
}
int h, k;
scanf("%d %d", &h, &k);
p[h][k]='+';
paint(p, h, k);
for(int x=0; x<n; x++){
for(int y=0; y<n; y++){
printf("%c", p[x][y]);
}
printf("\n");
}
return 0;
}
遞迴真的好難
想問為什麼會全部變成+ 感恩
因為你輸入的地方就錯了,輸入每一行的最後面有換行字元\n,在scanf("%c", &p[i][j])的時候會讀到換行字元
例如輸入範例測資你的程式的p會長這樣:
另外你的paint()函式有可能會存取到p範圍外的地方,會WA