본문 바로가기

Algorithm

1226. [S/W 문제해결 기본] 7일차 - 미로1

반응형

출처

https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

 

마지막에 도착지점은 3이 들어와야 하므로 que의 push조건을 잘 설정 해야한다.

문제 푸는 요령 컴파일 완료 -> 테케 넣고 -> 틀렸으면 로그 삽입. -> 틀린 부분 바로잡기.

 

 

 

#include<iostream>
#include<queue>


using namespace std;
string arr[16];
bool visit[16][16];




int main(void)
{
	
	for(int i = 0; i<10; i++)
	{
		
		
		int N;
		cin >> N;
		
		bool check = false;
		
		
		for(int j = 0; j < 16; j++)
		{
			cin >> arr[j]; 
			for(int k = 0; k < 16; k++)
			{
			
				visit[j][k] = false;
			}
		}
		
	
		queue< pair<int, int> > que;
		que.push({1,1});
		visit[1][1] = true;
		
		while(!que.empty())
		{
			
			int y = que.front().first;
			int x = que.front().second;
			que.pop();
			
			
			
			
			if(arr[y][x] ==  '3')
			{
				cout<<"#"<<N<<" "<<1<<endl;
				check = true;
				break;
			}
			
			
			
			
			if(x+1 < 16 && y < 16 && x >= 0 && y >= 0 )
			{
				if(!visit[y][x+1] && (arr[y][x+1] == '0' || arr[y][x+1] == '3'))
				{
					que.push({y,x+1});
					visit[y][x+1] = true;
					}
			}
			
			
			if(x-1 < 16 && y < 16 && x-1 >= 0 && y >= 0 )
			{
				if(!visit[y][x-1] && (arr[y][x-1] == '0' || arr[y][x-1] == '3'))
				{
					que.push({y,x-1});
					visit[y][x-1] = true;
					
				}
			}
			
			
			
			
			
			if(x < 16 && y+1 < 16 && x >= 0 && y >= 0 )
			{
				if(!visit[y+1][x] && (arr[y+1][x] == '0' || arr[y+1][x] == '3'))
				{
					que.push({y+1,x});
					visit[y+1][x] = true;
							
				}
			}
			
			
			
			
			if(x < 16 && y-1 < 16 && x >= 0 && y-1 >= 0 )
			{
				if(!visit[y-1][x] && (arr[y-1][x] == '0' || arr[y-1][x] == '3'))
				{
					que.push({y-1,x});
					visit[y-1][x] = true;
						
				}
			}
		}
		
		
		if(!check)
		{
			cout<<"#"<<N<<" "<<0<<endl;
			
		}
		
		
	}
	
	
	
	
}
반응형