• LeetCode Word Search


      //这个方案目前超时,需要其他方法
    1
    char vf[100][100]; 2 3 class Solution { 4 public: 5 6 7 bool DFS(vector<vector<char> > &v,int i,int j,const char *p) 8 { 9 bool r; 10 11 12 if(v[i][j]!=p[0]) 13 return false; 14 if((v[i][j]==p[0])&&(p[1]==0)) 15 return true; 16 if(i>0) 17 { 18 19 if(vf[i-1][j]==0) 20 { 21 vf[i][j]=1; 22 r=DFS(v,i-1,j,p+1); 23 if(r==true) 24 return true; 25 vf[i][j]=0; 26 } 27 28 } 29 if(i<v.size()-1) 30 { 31 32 if(vf[i+1][j]==0) 33 { 34 vf[i][j]=1; 35 r=DFS(v,i+1,j,p+1); 36 if(r==true) 37 return true; 38 vf[i][j]=0; 39 } 40 } 41 if(j>0) 42 { 43 44 if(vf[i][j-1]==0) 45 { 46 vf[i][j]=1; 47 r=DFS(v,i,j-1,p+1); 48 if(r==true) 49 return true; 50 vf[i][j]=0; 51 } 52 } 53 if(j<v[0].size()-1) 54 { 55 56 if(vf[i][j+1]==0) 57 { 58 vf[i][j]=1; 59 r=DFS(v,i,j+1,p+1); 60 if(r==true) 61 return true; 62 vf[i][j]=0; 63 } 64 } 65 return false; 66 67 } 68 bool exist(vector<vector<char> > &board, string word) { 69 // Start typing your C/C++ solution below 70 // DO NOT write int main() function 71 int i,j; 72 int ic,jc; 73 bool r; 74 if(board.size()>40) 75 return false; 76 for(i=0;i<board.size();i++) 77 { 78 for(j=0;j<board[0].size();j++) 79 { 80 for(ic=0;ic<100;ic++) 81 for(jc=0;jc<100;jc++) 82 vf[ic][jc]=0; 83 vf[i][j]=1; 84 r=DFS(board,i,j,word.c_str()); 85 if(r) 86 return true; 87 vf[i][j]=0; 88 } 89 } 90 91 92 } 93 94 95 96 97 98 99 100 101 102 103 104 };

    memset(vf,0,40000) 用时88ms,

    循环清零竟然用1440ms;

     1 char vf[200][200];
     2 
     3 
     4 
     5 class Solution {
     6 public:
     7 
     8 
     9     bool DFS(vector<vector<char> > &v,int i,int j,const char *p)
    10     {
    11         bool r;
    12 
    13 
    14         if(v[i][j]!=p[0])
    15             return false;
    16         if((v[i][j]==p[0])&&(p[1]==0))
    17             return true;   
    18         if(i>0)
    19         {
    20 
    21             if(vf[i-1][j]==0)
    22             {
    23                 vf[i-1][j]=1;
    24                 r=DFS(v,i-1,j,p+1);
    25                 if(r==true)
    26                     return true;
    27                 vf[i-1][j]=0;
    28             }
    29 
    30         }  
    31         if(i<v.size()-1)
    32         {
    33 
    34             if(vf[i+1][j]==0)
    35             {
    36                 vf[i+1][j]=1;
    37                 r=DFS(v,i+1,j,p+1);
    38                 if(r==true)
    39                     return true;
    40                 vf[i+1][j]=0;
    41             }
    42         }
    43         if(j>0)
    44         {
    45 
    46             if(vf[i][j-1]==0)
    47             {
    48                 vf[i][j-1]=1;
    49                 r=DFS(v,i,j-1,p+1);
    50                 if(r==true)
    51                     return true;
    52                 vf[i][j-1]=0;
    53             }
    54         }
    55         if(j<v[i].size()-1)
    56         {
    57 
    58             if(vf[i][j+1]==0)
    59             {
    60                 vf[i][j+1]=1;
    61                 r=DFS(v,i,j+1,p+1);
    62                 if(r==true)
    63                     return true;
    64                 vf[i][j+1]=0;
    65             }
    66         }
    67         return false;
    68 
    69     }
    70     bool exist(vector<vector<char> > &board, string word) {
    71         // Start typing your C/C++ solution below
    72         // DO NOT write int main() function
    73         int i,j;
    74         int ic,jc;
    75         bool r;
    76         const char*tt=word.c_str();
    77         for(i=0;i<board.size();i++)
    78         {
    79             for(j=0;j<board[i].size();j++)
    80             {
    81                 if(tt[0]!=board[i][j])
    82                     continue;
    83                 memset(vf,0,40000);
    84                 vf[i][j]=1;
    85                 r=DFS(board,i,j,tt);
    86                 if(r)
    87                     return true;
    88                 vf[i][j]=0;
    89             }
    90         }
    91         return false;
    92 
    93     }
    94 };
  • 相关阅读:
    最小化x11 debian
    chroot后 运行xeyes Error: Can't open display: :0.0
    std::bind1st和std::bind2nd
    bind1nd,not1,compose1等用法
    python中*和**的参数
    QT静态编译
    Qt中QEvent和信号槽的区别
    JSON文件内容加注释的几种方法
    C语言--#、##、__VA_ARGS__ 和##__VA_ARGS__ 的使用
    QT正则表达式
  • 原文地址:https://www.cnblogs.com/mengqingzhong/p/3114583.html
Copyright © 2020-2023  润新知