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

  • fkdlslss
    fkdlslss

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

    #include<iostream>
    #include<stdio.h>
    #include<vector>
    #include<string.h>
    
    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<char> 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;
    }
    

    7년 전
2개의 댓글이 있습니다.
  • astein
    astein

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


    7년 전 link
  • fkdlslss
    fkdlslss

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

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


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