GaGe

알고리즘 과제 PA5 본문

알고리즘/[2020] 알고리즘 과제

알고리즘 과제 PA5

Sorrel 2021. 1. 9. 15:52

n*n 격자에서 갈 수 있는 모든 경로 (돌아가는 길 포함) 경우의 수를 세는 알고리즘인데 수행시간이 너무 오래 걸린다.

5*5까지 가능함.

#include "grid.h"
#include <iostream>

using namespace std;
unsigned long long grid::numOfWays(void){
	int visited[10][10]={0};
	visited[0][0]=1;
	fun(visited, 0,0); 
	return result;
}

int grid::fun(int (*arr)[10], int a, int b){
	if(a==n&&b==n){
		result+=1;
		arr[a][b]=0;
		return 0;
	}
	if(arr[a+1][b]==0||arr[a-1][b]==0||arr[a][b-1]==0||arr[a][b+1]==0){//삭제 후보 3  
	}
	else{ 
		return 0;
	}

	int newvisited[10][10]={0};

	for(int i = 0; i <n+1 ; i++){ //삭제 후보 4
		for(int j =0; j<n+1 ; j++){
			newvisited[i][j] = arr[i][j];
		}
	}
	if(newvisited[a+1][b]==0&&a+1>=0&&a+1<=n){
		newvisited[a+1][b]=1;
		fun(newvisited, a+1, b);
		arr[a][b]=0;
	}

	if(newvisited[a][b+1]==0&&b+1>=0&&b+1<=n){
		newvisited[a][b+1]=1;
		fun(newvisited, a, b+1);
		arr[a][b]=0;
	}

	if(newvisited[a-1][b]==0&&a-1>=0&&a-1<=n){
		newvisited[a-1][b] =1;
		fun(newvisited, a-1, b);
		arr[a][b]=0;
	}

	if(newvisited[a][b-1]==0&&b-1>=0&&b-1<=n){
		newvisited[a][b-1]=1;
		fun(newvisited, a, b-1);
		arr[a][b]=0;
	}
	
}

'알고리즘 > [2020] 알고리즘 과제' 카테고리의 다른 글

알고리즘 과제 PA4  (0) 2021.01.09
알고리즘 과제 PA3  (0) 2021.01.09
알고리즘 과제 PA2  (0) 2021.01.09
알고리즘 과제 PA1  (0) 2021.01.09
Comments