采用深度搜索算法
代码如下:
bool ex ( char * * board, int * boardColSize, int line, int i, int j, int w, int * * mask, char * word) {
if ( i< 0 || i>= line || j< 0 || j>= boardColSize[ i] )
return false ;
if ( board[ i] [ j] == word[ w] && mask[ i] [ j] == 0 ) {
mask[ i] [ j] = 1 ;
if ( w== strlen ( word) - 1 ) return true ;
if ( ex ( board, boardColSize, line, i+ 1 , j, w+ 1 , mask, word) == true )
return true ;
if ( ex ( board, boardColSize, line, i- 1 , j, w+ 1 , mask, word) == true )
return true ;
if ( ex ( board, boardColSize, line, i, j+ 1 , w+ 1 , mask, word) == true )
return true ;
if ( ex ( board, boardColSize, line, i, j- 1 , w+ 1 , mask, word) == true )
return true ;
mask[ i] [ j] = 0 ;
}
return false ;
}
bool exist ( char * * board, int boardSize, int * boardColSize, char * word) {
int w= 0 ;
int * * mask = ( int * * ) malloc ( sizeof ( int * ) * boardSize) ;
for ( int i= 0 ; i< boardSize; i++ ) {
mask[ i] = ( int * ) malloc ( sizeof ( int ) * boardColSize[ i] ) ;
for ( int j= 0 ; j< boardColSize[ i] ; j++ )
mask[ i] [ j] = 0 ;
}
for ( int i= 0 ; i< boardSize; i++ ) {
for ( int j= 0 ; j< boardColSize[ i] ; j++ )
if ( ex ( board, boardColSize, boardSize, i, j, w, mask, word) == true )
return true ;
}
return false ;
}