개발자 톡
C언어 코드 어딜 고쳐야 할지 감이 안와요,, 4시간 붙잡고 있었어요,,,
- 등록일
- 2024-03-21 21:04:30
- 조회수
- 782
- 작성자
- yeinseo1142
#include <stdio.h>
#define MAX_N 10
int N, M;
int board[MAX_N][MAX_N];
long long max_harvest = 0;
void dfs(int x, int y, int step, long long sum, int visited[MAX_N][MAX_N]) {
// 종료 조건: 3번 이동하면 종료
if (step == 3) {
printf("%d ",sum);
//if(max_harvest > sum) visited[nx][ny]=0;
max_harvest = max_harvest > sum ? max_harvest : sum; // 최대값 갱신
return;
}
// 상하좌우 이동을 모두 시도
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
for (int d = 0; d < 4; d++) {
int nx = x + dx[d];
int ny = y + dy[d];
// 새로운 위치가 유효한지 확인
if (nx >= 0 && nx < N && ny >= 0 && ny < N && !visited[nx][ny]) {
visited[nx][ny] = 1; // 방문 표시
dfs(nx, ny, step + 1, sum + board[nx][ny], visited); // 재귀 호출
if (max_harvest>sum) visited[nx][ny] = 0; // 백트래킹
}
}
}
int main() {
// 입력 받기
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
scanf("%d", &board[i][j]);
}
}
int visited[MAX_N][MAX_N] = {0};
int fin[M];
// 각 출발 위치에서부터 열매 수확량 계산하여 최댓값 갱신
for (int k = 0; k < M; k++) {
int x, y;
scanf("%d %d", &x, &y);
x--; y--; // 0-based index로 변환
// 방문 여부 배열 초기화
visited[x][y] = 1; // 시작 위치 방문 표시
dfs(x, y, 0, board[x][y], visited); // DFS 탐색 시작
printf("%lld\n", max_harvest);
fin[k]=max_harvest;
max_harvest = 0;
}
// 최대 열매 수확량의 합 출력
printf("%lld\n", max_harvest);
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
printf("%d ",visited[i][j]);
}
printf("\n");
}
return 0;
}