#include <iostream>#include <string>#include <vector>usingnamespacestd;charchrArray[5][5];intxAdjustment[8]={-1,-1,-1,0,1,1,1,0};intyAdjustment[8]={-1,0,1,1,1,0,-1,-1};boolhasWord(intx,inty,stringword);intmain(){intnTestCase;intnFindCount;stringstrFindWord;boolbExist;boolflag;cin>>nTestCase;// input foundationfor(inti=0;i<5;i++)for(intj=0;j<5;j++)cin>>chrArray[i][j];cin>>nFindCount;for(inth=0;h<nFindCount;h++){cin>>strFindWord;bExist=false;flag=false;for(inti=0;i<5;i++){for(intj=0;j<5;j++){if(hasWord(i,j,strFindWord)){bExist=true;flag=true;}if(flag)break;}if(flag)break;}if(bExist)cout<<strFindWord<<" YES"<<endl;elsecout<<strFindWord<<" NO"<<endl;}}// main()boolhasWord(intx,inty,stringword){pair<int,int>direction;vector<pair<int,int>>existDirection;if(x>5||x<0||y>5||y<0)returnfalse;// 범위 초과if(chrArray[x][y]!=word[0])returnfalse;// 첫글자 다름if(word.size()==1)returntrue;// 단어가 한글자일 때// 범위내, 첫글자가 같고, 글자수가 하나가 아닐때for(inti=0;i<8;i++){// 다음 글자가 존재하는 방향을 저장if(chrArray[x+xAdjustment[i]][y+yAdjustment[i]]==word[1]){direction.first=xAdjustment[i];direction.second=yAdjustment[i];existDirection.push_back(direction);}}// 다음글자가 존재하는 방향만 검사if(existDirection.size()){for(vector<pair<int,int>>::iteratoritr=existDirection.begin();itr!=existDirection.end();itr++){if(hasWord(x+(*itr).first,y+(*itr).second,word.substr(1)))returntrue;}}returnfalse;}// hasWord()
보글문제 8장 내용 참고하면서 가지쳐내고 있는데
어느부분을 어떻게 쳐낼지 모르겠습니다.
도움 주시면 감사하겠습니다.
cjdahrl
아래는 코드입니다.
보글문제 8장 내용 참고하면서 가지쳐내고 있는데
어느부분을 어떻게 쳐낼지 모르겠습니다.
도움 주시면 감사하겠습니다.
10년 전