절대/상대 오차는 10-9 -> 소수점 아래 10자리까지 허용이므로 cout.precision(10)사용
#include <iostream>
#define MAX 29
using namespace std;
int N;
double dir_percent[4];
int dy[] = {0,0,1,-1};
int dx[] = {1,-1,0,0};
bool visit[MAX][MAX];
double dfs(int y, int x, int dis) {
if (dis >= N) {
return 1.0;
}
double result = 0.0;
visit[y][x] = true;
for (int i = 0; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (visit[ny][nx])continue;
//현재 확률 + 다음 방향에 대한 확률
result+=(dir_percent[i] * dfs(ny, nx, dis + 1));
}
visit[y][x] = false;
return result;
}
int main() {
cin >> N;
int temp;
for (int i = 0; i < 4; i++) {
cin >> temp;
dir_percent[i] = temp / 100.0;
}
cout.precision(10);//소수점 10자리 제한
cout << dfs(14, 14, 0);
return 0;
}
댓글