개발자 톡

연습문제 톡 함께하는 효도

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;

}


#함께하는_효도
#c언어
#c

이 카테고리의 톡 더보기