DP없이 완전탐색만으로 우선해보고싶어서 작성한 코드입니다.
런타임 에러 내용은
RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)
입니다. 2차원 배열을 사용한것 외에는 포인터관련 연산을 하지 않았는데 어느부분이 문제가 되서 런타임 에러가 발생하는지 잘 모르겠습니다;
100 x 100 크기의 int형 2차원 배열, 격자의 크기 wide가 전역변수로 선언되어있고 scanf로 각각 내용을 입력받습니다.
#include <utility>#include <stdio.h>#include <string>#include <map>#include <algorithm>#include <vector>usingnamespacestd;// 현위치로부터 보드에 도달할 수 있는지 없는지를 확인해주는 canReachboolcanReach(inty,intx);// 현위치가 유효한 보드범위 내 위치인지 확인하는 isRightboolisRight(inty,intx);// 격자를 모두 -1로 초기화해준다.voidinitiateBoard(void);// 전역변수intboard[100][100];// 격자intwide=0;// 격자의 크기intmain(void){intC=0;// case의 수// case 수를 입력받음scanf("%d",&C);// case 만큼 수행while(C--){// 격자를 초기화initiateBoard();// 격자의 크기를 입력받음scanf("%d",&wide);// 격자정보를 입력받음for(inti=0;i<wide;i++){for(intj=0;j<wide;j++){scanf("%d",&(board[i][j]));}}// 경로존재 여부에따른 결과 출력if(canReach(0,0))printf("YES\n");elseprintf("NO\n");}return0;}boolcanReach(inty,intx){boolflag=false;// =|연산을 위한 flag// 기저사례1 - 현재 격자위치가 끝지점( board[y][x] == 0 )에 도달, true반환if(board[y][x]==0)returntrue;// 기저사례2 - 현재 격자위치가 유효하지 않은 board 범위에 도달, (영역초과) -> isRightelseif(!isRight(y,x))returnfalse;else{// 재귀호출// 1. 현재위치y,x에서 board[y][x]만큼 오른쪽으로flag|=canReach(y,x+board[y][x]);// 2. 현재위치y,x에서 board[y][x]만큼 아래쪽으로flag|=canReach(y+board[y][x],x);returnflag;}}boolisRight(inty,intx){// y, x의 값이 wide 보다 크거나 같으면 잘못된 위치 -> false 반환if((y>=wide)||(x>=wide))returnfalse;elsereturntrue;}voidinitiateBoard(void){// 격자를 모두 -1로 초기화for(inti=0;i<100;i++){for(intj=0;j<100;j++){board[i][j]=-1;}}}
kim08277
DP없이 완전탐색만으로 우선해보고싶어서 작성한 코드입니다.
런타임 에러 내용은
RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)
입니다. 2차원 배열을 사용한것 외에는 포인터관련 연산을 하지 않았는데 어느부분이 문제가 되서 런타임 에러가 발생하는지 잘 모르겠습니다;
100 x 100 크기의 int형 2차원 배열, 격자의 크기 wide가 전역변수로 선언되어있고 scanf로 각각 내용을 입력받습니다.
10년 전