DFS-POJ|1501 word search wonder

(有返回值的DFS(bool 值))
這道題與其他不同的地方在于,搜索一個(gè)單詞的時(shí)候,只能使用一種移動(dòng)的方式,比如豎直,或者水平,或者斜的,而不可以交叉使用。并且要輸出開始位置與結(jié)束位置。
遍歷每一個(gè)點(diǎn),如果能成功找到,那么這個(gè)點(diǎn)就是開始的位置,結(jié)束的位置,利用這個(gè)單詞本身的長(zhǎng)度來(lái)計(jì)算得出,并且需要記錄下來(lái)是按照哪個(gè)方向來(lái)移動(dòng)的,也就是代碼中的k

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
typedef long long ll;

int n;
const int MAXN = 100;
char board[MAXN][MAXN];
bool visit[MAXN][MAXN];
string s;
int len = 0;
bool res = false;
int direction[8][2] = {{0,1}, {0,-1}, {1,0}, {-1, 0},{1,1}, {-1,-1}, {1,-1}, {-1,1}};

// 從x,y這個(gè)點(diǎn)開始遍歷 id表示字符串s當(dāng)中,前id個(gè)字符都相等
bool DFS(int x, int y, int id, int dirs){
     if(x < 0 || y < 0 || x>= n || y >= n)
          return false;
     if(board[x][y] != s[id])
          return false;
     if(id == len-1)
          return true;
     return DFS(x+direction[dirs][0], y+direction[dirs][1], id+1, dirs);
}


int main(){
     cin>>n;
     memset(visit, 0, sizeof(visit));
     for(int i = 0; i < n; i++){
          for(int j= 0; j < n; j++){
               cin>>board[i][j];
          }
     }
     
     while(cin>>s && s != "0"){
          bool res = false;
          len = s.length();
          int i = 0;
          int j = 0;
          int k = 0;  // 用來(lái)記錄是哪個(gè)方向
          for(i = 0; i < n; i++){
               for(j = 0; j < n; j++){
                    for(k = 0; k < 8; k++){
                         res = DFS(i,j,0,k);  // 這樣每次擴(kuò)展的時(shí)候只專注一個(gè)方向
                         if(res)
                              break;
                    }
                    if(res)
                         break;
               }
               if(res)
                    break;
          }
          if(!res)
               cout<<"Not found"<<endl;
          else{
               i++;
               j++;
               int end_i = i+direction[k][0] * (len-1);
               int end_j = j+direction[k][1] * (len-1);
               printf("%d,%d %d,%d\n", i,j,end_i,end_j);
          }
     }
     return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容