최단거리 길찾기
하늘
질문 내용 :
질문 내용 : #include stdio.h
int main()
{
int a,b;//입력
//for문
int cnt=0;//카운트
int cntt=0;
int x=0,y=1;//배열
int arr[7][10]={{1,0,1,1,1,1,1,1,1,1},
{1,0,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,1,1,1,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,1,1,1,1,1,1,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}};
scanf(%d %d,&a,&b);
for(;;)
{arr[2][2]=0;
if(x==a && y==b)
break;
else
{
if(arr[x+1][y]==0)
{x++;
cnt++;
arr[x][y]=1;
}
else if(arr[x-1][y]==0)
{x--;
cnt++;
arr[x][y]=1;
}
else if(arr[x][y+1]==0)
{
y++;
cnt++;
arr[x][y]=1;
}
else if(arr[x][y-1]==0)
{
y--;
cnt++;
arr[x][y]=1;
}
}
}
for(;;)
{arr[3][1]=1;
arr[1][1]=0;
arr[2][1]=0;
arr[2][2]=0; //이전 for문에서 닫은 길을 0으로 설정하여 다시 길을 만들어주었습니다.
if(x==a && y==b)
break;
else
{
if(arr[x+1][y]==0)
{x++;
cntt++;
arr[x][y]=1;
}
else if(arr[x-1][y]==0)
{x--;
cntt++;
arr[x][y]=1;
}
else if(arr[x][y+1]==0)
{
y++;
cntt++;
arr[x][y]=1;
}
else if(arr[x][y-1]==0)
{
y--;
cntt++;
arr[x][y]=1;
}
}
}
printf(%d\n,cnt);
printf(%d\n,cntt);
if(cntcntt)
printf(%d\n,cnt);
else
printf(%d\n,cntt);
}
문제는 미로찾기 입니다.
원래는 길이 하나였고 cnt 값만 출력하는건데 좀더 확장해서 길을 두개 만들어봤습니다.
일단 돌아가는 건 [0][1]를 0(시작점)으로 잡고 for문을 돌아가며 cnt값을 증가시킵니다.그리고 scanf로 받은 a,b의 값이 x,y와 같으면 cnt를 출력하는건데요.. 한길로는 정상적으로 작동합니다.
길을 두개로 만드니 머리가 아파지네요.. 그래서 제가 생각한건
일단 첫번째 for문에서 [2][2]를 1을 주어서 길을 막은 후 [4][8]까지 길을 찾아서 cnt를 증가
두번째로 [3][1]를 1로 주어서 길을 막은 후 두번째 길을 통해 [4][8]까지 길을 찾아서 cntt를 증가 시킵니다.
그래서 마지막에 cnt값과 cntt값을 비교하여 작은 값을 출력하는 건데요
cnt값은 printf 에 의해 정상 출력인데 cntt는 0으로만 뜨네요.. 뭐가 문제인지좀 봐주세요.ㅜㅜ