컴퓨터공부/알고리즘

미로찾기(백트래킹, backtracking) - 지나간 경로 출력

achivenKakao 2007. 10. 6. 21:38

#include<stdio.h>

int map[7][7] = {{2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 2, 0, 2, 2},
{2, 2, 0, 2, 0, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2}};

int visit(int x, int y);
void print_path();

int success;
int start_x, start_y;
int end_x, end_y;
int sp, ri[100], rj[100];

void main()
{
 sp = 0;
 start_x = 1;
 start_y = 1; // 시작지점
 end_x = 5;
 end_y = 5;  // 최종도착지점
 
 success = 0;
 
 printf("미로 찾기\n");
 
 if(!visit(1,1))
  printf("출구를 찾을 수 없습니다.");
}

int visit(int x, int y)
{
 map[x][y] = 1;      // 지나간 위치를 표시
 ri[sp] = x;
 rj[sp] = y;
 sp++;
 
 if( x == end_x && y == end_y)   // 최종 도착지점
 {
  print_path();
  success = 1;
 }
 
 if( success == 0 && map[x][y+1] == 0)
  visit(x, y+1);
 if( success == 0 && map[x+1][y] == 0)
  visit(x +1, y);
 if( success == 0 &&  map[x][y-1] == 0)
  visit(x, y -1);
 if( success == 0 &&  map[x-1][y] == 0)
  visit(x-1, y);
 
 sp--;
 return success;
}

void print_path()
{
 int k;
 for(k =0; k < sp; k++)
  printf("(%d,%d) ", ri[k], rj[k]);
}