• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

65번 문제 질문입니다.

20.09.08 22:32 작성 조회수 134

0

int n, k ,cnt = 0;

int ch[10][10];

int map[10][10];

int dx[4] = {-1,1,0,0};

int dy[4] = {0,0,-1,1};

void DFS(int x, int y){

int i,xx,yy;// 이동할 격자 좌표 

if(x == 7 && y ==7){

cnt++;

}

else {

for(i = 0; i<4;i++){

xx = x+dx[i];

yy = y+dy[i];

if(xx<1 || xx>7 || yy>7 || yy<1 ) continue;

if(map[xx][yy]==0){

map[xx][yy] = 1;

DFS(xx,yy);

map[xx][yy] = 0;

}

}

}

}

int main(){

freopen("input.txt", "rt",stdin); //rt read txt

int i,c,b,j;

for(i = 1; i<=7;i++){

for(j= 1; j<=7;j++){

scanf("%d", &map[i][j]);

}

}

ch[1][1]=1;

DFS(1,1);

printf("%d",cnt);

return 0;

궁금한게 생겨서 질문드립니다. 

map에서 지나가는 길에 1을 넣으면서 가고 돌아올때 0을 넣으면서 돌아오면 될것같아서 위처럼 구현했는데 8이아니라 16이 나오더라구요

왜 그런지 알 수 있을가요? 제가 무엇을 놓친걸까요.. 

답변 1

답변을 작성해보세요.

0

안녕하세요^^

map으로 체크역할까지 할려고 했으니 main()에서 시작하는 (1, 1)좌표도 ch[1][1]=1이 아니라 map[1][1]=1로 하고 시작해야 합니다.