• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

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으로 넘기면 정상작으로 동작할 것으로 생각했으나 실제로 그렇지 않아 의문이 생기게되어 질문드립니다. 함수의 인수로 벡터와 배열을 넘길때와 동적생성한 배열을 넘길때의 차이를 알고 싶습니다!

 

 

 

답변 1

답변을 작성해보세요.

0

안녕하세요^^

int** visit 와 같이 하면 주소값이 넘어가는게 아닐까 싶은데 저도 잘 모를겠습니다.