학교에서 미로찾기 프로그램을 짜오라는데 ;;
0,1로 된 지도를 주고
시작점과 도착점을 지정하면 그 사이의 길을 찾고 거리를 구하게 하려는데
스택을 쓰라는데 잘 몰라서 때려치우고
가는 길을 2로 바꾸고 그냥 한칸 갈때마다 숫자를 하나씩 더하게 하는데
다른건 다 대는데
중간에 길이 있는데도 길이 없다고 나와요 ㅠㅠ
예를들어 왼쪽위끝점 (0,0)에서 오른쪽아래끝점(15,15)까지 가게 하면 길 없다고 하고
(3,15)에서 (0,0)까지 가게 해도 길이 없다고 하고...
그런데 (0,0)부터 (3,15)까지는 또 잘 되고....
이렇게 어떤 지점은 되고 어떤 지점은 안되고.......
수업좀 제대로좀 나갈걸... 뭔가 크게 잘못한 느낌;;;
==========================================
#include <stdio.h>
int start1, start2; /*시작점 좌표*/
int end1, end2; /*도착점 좌표*/
int a;
int b;
int length = 0;
void Point();
void Point2();
void Findpath();
void Moveright();
void Movedown();
void Moveleft();
void Moveup();
void Backright();
void Backdown();
void Backleft();
void Backup();
void Finish();
void Noway();
/*맵 정보*/
int map[16][16] = {
{1,1,1,0,0,0,0,1,1,0,1,0,1,1,1,1},
{0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,1},
{0,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0},
{1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1},
{1,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1},
{0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1},
{0,0,1,0,0,1,1,1,0,1,1,0,1,0,0,1},
{0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1},
{0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,1},
{0,0,1,0,1,0,0,0,0,0,1,1,1,0,0,1},
{0,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1},
{1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,1},
{1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1},
{1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1},
{1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1},
};
/*Main 함수*/
void main()
{
int i;
printf("미로 찾기 프로그램입니다.\n");
printf("미로의 정보는 다음과 같습니다.\n\n");
for(i = 0; i < 16; i++){
printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",map[i][0],map[i][1],map[i][2],map[i][3],map[i][4],map[i][5],map[i][6],map[i][7],map[i][8],map[i][9],map[i][10],map[i][11],map[i][12],map[i][13],map[i][14],map[i][15]);
}
Point(); /*여기까지가 시작,도착점 입력*/
a=start1;
b=start2;
Findpath(); /*길찾기 함수*/
}
/*시작점 함수*/
void Point()
{ printf("\n시작점과 끝점을 입력하세요. 1이 길이 있는 곳입니다.(예시:1,1)\n");
printf("시작점 => ");
scanf("%d,%d",&start1,&start2);
if(map[start1][start2] == 0){
printf("시작점으로 입력한 곳은 길이 아닙니다.");
Point();
}
else if(map[start1][start2] ==1)
Point2();
else{
printf("잘못 입력하셨습니다.\n");
Point();
}
}
/*도착점 함수*/
void Point2()
{
printf("도착점 => ");
scanf("%d,%d",&end1,&end2);
if(map[end1][end2]==0){
printf("도착점으로 입력한 곳은 길이 아닙니다.");
Point2();
}
else if(map[end1][end2]==1)
printf("시작점은 (%d,%d), 도착점은 (%d,%d)입니다.\n\n",start1,start2,end1,end2);
else{
printf("잘못 입력하셨습니다.");
Point2();
}
}
void Findpath()
{
if((a==end1 && b==end2) == 1){
map[a][b] = 2;
Finish();}
else if(map[a][b+1] == 1){
Moveright();
Findpath();}
else if(map[a+1][b] == 1){
Movedown();
Findpath();}
else if(map[a][b-1] == 1){
Moveleft();
Findpath();}
else if(map[a-1][b] == 1){
Moveup();
Findpath();}
else if(map[a][b+1] == 2){
Backright();
Findpath();}
else if(map[a+1][b] == 2){
Backdown();
Findpath();}
else if(map[a][b-1] == 2){
Backleft();
Findpath();}
else if(map[a-1][b] == 2){
Backup();
Findpath();}
else
Noway();
}
void Moveright()
{ map[a][b] = 2;
a=a;
b=b+1;
length += 1;
}
void Movedown()
{ map[a][b] = 2;
a=a+1;
b=b;
length += 1;
}
void Moveleft()
{ map[a][b] = 2;
a=a;
b=b-1;
length += 1;
}
void Moveup()
{ map[a][b] = 2;
a=a-1;
b=b;
length += 1;
}
void Backright()
{ map[a][b] = 3;
a=a;
b=b+1;
length -= 1;
}
void Backdown()
{ map[a][b] = 3;
a=a+1;
b=b;
length -= 1;
}
void Backleft()
{ map[a][b] = 3;
a=a;
b=b-1;
length -= 1;
}
void Backup()
{ map[a][b] = 3;
a=a-1;
b=b;
length -= 1;
}
void Finish()
{ int i;
for(i = 0; i < 16; i++){
printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",map[i][0],map[i][1],map[i][2],map[i][3],map[i][4],map[i][5],map[i][6],map[i][7],map[i][8],map[i][9],map[i][10],map[i][11],map[i][12],map[i][13],map[i][14],map[i][15]);
}
printf("시작점으로부터 도착점까지의 거리는 %d입니다.",(length-1));
}
void Noway()
{
printf("\n길이 없습니다.");
}