발상이 잘못된걸까요? 방법이 잘못된걸까요?(요점만 다시 찝어왔어요!)
조회수 646회
아래 그림처럼 img_3의 행렬이 있다면 가장 상위 행에서 아래로 내려가는데 내려갈땐 +-1의 범위로 내려가도록 설정했어요. 대신 내려가면서 그 범위에서 가장 최소가 되는 부분을 골라서 내려가게 했구요! 그런데 알고리즘이 생각대로 돌아가질 않네요..
최소값을 찾는데 문제가 있는걸까요..?
//////////////////////////////////////이전 값들 정리후//////////////////////////////////////////////
int ssd = 0; //최종으로 선택할 값
int* ssdd = new int[y]; //1행의 각 열마다 출발하여 y-1까지의 줄기내용을 저장한다
for (int i = 0; i < y; i++) { //줄기 내용의 초기화
ssdd[i] = 0;
}
for (int i = 0; i < y; i++) {
int col = i; //이전에 택한 행의 열값
int min = 100000; //최소값을 찾기 위해서
int im = 0;// 열값을 임시 저장할 공간
ssdd[i] += img_3[0][i]; //첫번째 행에서 각 열값을 미리 저장
for (int w = 1; w < x; w++) { //두번째 행부터 검사를 시작
if (col == 0) { //이전에 택한 열이 최좌측일때
for (int z = col; z <= col + 1; z++) {
if (img_3[w][z] < min) {
min = img_3[w][z];
im = z;
}
}
col = im;
ssdd[i] += img_3[w][col];
continue;
}
if (col == y - 1) { //이전에 택한 열이 최우측 일때
for (int z = col - 1; z <= col; z++) {
if (img_3[w][z] < min) {
min = img_3[w][z];
}
im = z;
}
col = im;
ssdd[i] += img_3[w][col];
continue;
}
for (int z = col - 1; z <= col + 1; z++) { //저스트 중간일때
if (img_3[w][z] < min) {
min = img_3[w][z];
}
im = z;
}
col = im;
ssdd[i] += img_3[w][col];
}
}
for (int i = 0; i < y; i++) { //임시 확인용
cout << ssdd[i] << " ";
}
ssd = ssdd[0];
for (int i = 1; i < y; i++) { //최소값 찾기
if (ssdd[i] < ssd) {
ssd = ssdd[i];
}
}
delete[]ssdd; //반환
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력