boggle 재귀로 완전탐색하는데 ... 재귀에 문제가 ..

  • User Avatar
    fkdlslss

    재귀로 짜보았늦데 ... 재귀를 처음 써보다 보니 재귀에서 방문한곳을 체크하는 과정에서 뭔가 부족한 부분이 있는거같습니다 ㅠㅠ 도움주시면 정말 감사하겠습니다.
    ~~~ c++
    #include
    #include
    #include
    #include

    using namespace std;

    int check(int a,int b,int c);

    bool visit[7][7];
    char arr[7][7];
    int sizeV;
    int answer;
    char str[10];

    vector v;

    int main(){
    int testCase;
    scanf("%d",&testCase);

    while(testCase--){
        memset(arr,NULL,sizeof(arr));
        memset(visit,true,sizeof(visit));
    
        for(int i=1;i<=5;i++){
            for(int j=1;j<=5;j++){
                char a;
                cin >> a;               //여기서 scanf("%c",&a);  이렇게 하면 왜 안되는걸까??
                arr[i][j] = a;
            }
        }//입력 완료
    
    
        int num;
       // scanf("%d",&num);
        cin >> num;
        for(int t=0;t<num;t++){
            memset(str,NULL,sizeof(str));
            //vector<char>::iterator iter;
           // v.clear();                  //초기화
            sizeV=0;
    
    
            while (true) {
                 int c;
                //printf("1");
                c = getchar();
               // cin >> c;
                if (c == '\n') {
                    break;
                }
                str[sizeV] = c;
                sizeV++;
            }
    
            /*while(scanf("%c",&c) != '\n'){
                str[sizeV] = c;
                //v.push_back(c);
                sizeV++;
            }
            printf("dasd");*/
    
            answer = 0;
            for(int i=1;i<=5;i++){
                for(int j=1;j<=5;j++){
                   if(arr[i][j] == str[0]){
                       answer=check(1,i,j);
                       printf("여기는 들어감 \n");
                       if(answer== 1){
                           break;
                       }
                       memset(visit,true,sizeof(visit));
                    }
                }
            }
    
            if(answer == 1){
                printf("YES\n");
            }else{
                printf("NO\n");
            }
        }
    }
    return 0;
    

    }

    int check(int a,int b,int c){ //여기서 d는 다음에 올 글자라고 해야할 둣
    if(b<1||b>5||c<1||c>5){
    return 0;
    }
    if(a == sizeV){
    if(arr[b][c] == str[a]){
    answer = 1;
    return 0;
    }
    }else{

        for(int i=b-1;i<=b+1;i++){
            for(int j=c-1;j<=c+1;j++){
                if((i!=b)||(j!=c)){
                    if(arr[i][j] == str[a]){
                        printf("%d %d\n", i,j);
                        if(visit[i][j]!=false){
                            visit[i][j] = false;
                            return check(a+1,i,j);
                        }else{
                            return 0;
                        }
    
                    }else{
                        return check(a,i,j);
                    }
                }
            }
        }
    }
    return 0;
    

    }

    
    
    

    10년 전
2개의 댓글이 있습니다.
  • User Avatar
    astein

    우선 scanf("%c",&a); 대신 scanf(" %c",&a); 로 수정하면 입력부분의 문제를 해결될 것 같아요. "%c"를 사용하면줄바꿈 character까지 입력으로 받아지기 때문에 정상적으로 실행되지 않습니다.


    10년 전 link
  • User Avatar
    fkdlslss

    while (true) {
    int c;
    //printf("1");
    c = getchar();
    // cin >> c;
    if (c == '\n') {
    break;
    }
    str[sizeV] = c;
    sizeV++;
    }

    이걸 통해서 각각 문자들을 배열에 넣고싶은데 왜 안되는걸까요 ㅠㅠ


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