더블릿 문제인데 올려봅니다.

  • lht94
    lht94

    요즘 책갖고 공부하는 초보인데요 혼자 잡고잇는데 안풀려서 질문게시판에 올려 봐요.
    보물섬 문제인데요

    완전탐색 공부하고 적용해볼려하는데...

    힘드네요
    http://211.228.163.31/pool/koi_treasure/koi_treasure.php?pname=koi_treasure
    이게 문제고요

    #include
    #include
    #define INF 9999
    int map[51][51];
    int check[51][51];
    int n, m;

    int search(int x, int y, int a, int b,int d)

    {
    if(x<0||x>51)
    return INF; //범위 초과시 INF반환
    if(y<0||y>51)
    return INF;

    if(map[x][y]!=1)
        return INF;// 육지(L)=1 바다(W)=0
    if(check[x][y]!=0)  //한번 지나왔던곳을 다시 오면 INF반환
        return INF;
    check[x][y]=1;// x,y를 지나갔다는걸 기록(0이면 x 1이면 o)
    if(x==a&&y==b)//지점 도착시 지금  까지의 거리(시간)반환
          return d; 
    
    
    int ret=99999; //큰수로 초기화

    for(int i=-1;i<=1;i++)
    for(int j=-1;j<=1;j++)
    {
    if(i==j)//
    continue;
    if(i+j==0)
    continue;
    if(x+i<0||y+j<0)//범위초과시 넘어감
    continue;
    if(x+i>=n||y+j>=m)
    continue;
    int cand;

    cand=search(x+i,y+j,a,b,d+1);
    
        ret=min(ret,cand);// 최소거리
    
    
        check[x+i][y+j]=0;//  지나왔던 기록을 다시 없앰

    }

    return ret;
    }

    이게 제가 생각해서 그나마 짜본건데 실패햇어여.

    완전탐색으로 풀어도 되나요 저문제??

    그리고 제가 어느 부분을 잘못생각하고있는지...

    책 내용을 읽어보고 짜는데도 아직 너무 모르는게 많네요


    11년 전
3개의 댓글이 있습니다.
  • kcm1700
    kcm1700

    완전 탐색을 이용하여 푸는 문제가 아닙니다.


    11년 전 link
  • kcm1700
    kcm1700

    완전 탐색을 하기에는 공간이 너무 큽니다. 50*50개의 칸을 방문해야할 수 있는데 완전 탐색을 하면 대략 매 순간 3가지의 선택지가 있다고 하면 3^몇백 이상의 탐색을 해야할 수 있어요.


    11년 전 link
  • JongMan
    JongMan

    소스코드 업로드시에는 밑의 도움말을 참조해서 구문 강조가 되도록 올려 주시기 바랍니다.


    11년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.