-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
65번 미로탐색 질문있습니다!
22.08.22 14:28 작성 조회수 152
0
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define size 8
int cnt = 0;
int dx[4] = { 0,1,0,-1 };//12시 3시 6시 9시 방향 순
int dy[4] = { 1,0,-1,0 };
int dfs(int mtrx[][size], vector<vector<int> > visit, int x, int y)
{
int xx, yy;
if (x==size-1&&y==size-1)
{
cnt++;
}
else
{
visit[x][y] = 1;
for (int i = 0; i < 4; i++)
{
xx = x + dx[i];//x축으로 갈좌표
yy = y + dy[i];//y축으로 갈 좌표
if (xx < 1 || xx>7 || yy < 1 || yy>7)//행렬을 벗어나는 경우
continue;
if (mtrx[xx][yy] == 0 && visit[xx][yy] != 1)
{
dfs(mtrx,visit,xx,yy);
}
}
}
return cnt;
}
int main()
{
int mtrx[size][size];
vector<vector<int> > visit(size,vector<int>(size, 0));
for (int i = 1; i < size; i++)
{
for (int j = 1; j < size; j++)
{
cin>>mtrx[i][j];
}
}
int count = dfs(mtrx,visit, 1, 1);
cout << count;
}
65번 미로탐색 질문있습니다!
저는 전역변수를 사용하는 것보다 함수의 인수로 전달하는게 더 익숙하여 함수의 인수로 visit 벡터 즉 방문한 길인지 아닌지 판별하는 2차원 벡터를 넘겨주었습니다. 이렇게 할 경우 정확한 답이 나옵니다.
그러나 인수로 메인문에서 선언된 배열 자체 int visit[][size], 를 넘기거나 int** visit 처럼 동적생성을해서 배열을 넘기면
답이 정상적으로 나오지 않습니다. 저는 벡터가 동적생성되었기 때문에 int** visit으로 넘기면 정상작으로 동작할 것으로 생각했으나 실제로 그렇지 않아 의문이 생기게되어 질문드립니다. 함수의 인수로 벡터와 배열을 넘길때와 동적생성한 배열을 넘길때의 차이를 알고 싶습니다!
답변을 작성해보세요.
0
답변 1