OJ / 1376

#include <iostreamの> 
する#include <STDLIB.H> 
の#include <math.h>の
書式#include <アルゴリズム> 

名前空間STDを使用して、
チャーSTS [50] [50]。
BOOL訪れた[50] [50]。

INT DFS(INT I、整数jを、INT X2、Y2 INT、INT、M、N INT)。
int型minValue4(int型SUM1、int型SUM2、int型SUM3、int型sum4)。
int型minValue3(int型SUM1、int型SUM2、int型SUM3)。
int型minValue2(int型SUM1、int型SUM2)。
INTのmain(){ 
    int型M、N。
    int型X1、Y1、X2、Y2; 
    CIN >> M >> N。
    CIN >> X1 >> Y1 >> X2 >> Y2; 

    {(I ++; I <M INTがI = 0)するための
        ための(int型J = 0であり、j <N; J ++){ 
            CIN >> STS [I] [J]。
            訪問した[i] [j]は偽=。
        }
    }
    int型の合計。

    (STS [X1] [Y1] == '#'){もし
        訪問[X1] [Y1] = TRUE; 
    {}そうでなければ
        (!訪問[X1] [Y1]){もし
            和= DFS(X1、Y1、X2、Y2、M、N)。
        } 
    } 

    のprintf( "%dの\ n"は、合計)。
    0を返します。
} 

INT DFS(INT I、整数jを、INT X2、Y2 INT、INT、M、N INT){ 
    訪問[i] [j]は真=。
    もし(私== X2 && J == Y2)の戻り0; 
    INT SUM1 = 0、SUM2 = 0、SUM3 = 0、sum4 = 0。
    IF(I + 1 <M && STS [I + 1] [j] == '' &&訪問[I + 1] [j] ==偽){ 
        SUM1 = 1 + DFS(I + 1、J、X 2、 Y2、M、N)。
    }
    } 
    IF(J + 1 <N && STS [I]、[J + 1] == ''
        SUM2 = 1 + DFS(I、J + 1、X2、Y2、M、N)。
    IF(I - 1> = 0 && STS [I - 1]〜[J] == &&訪問[I-1]〜[J] ==偽''){ 
        SUM3 = 1 + DFS(I - 1、J、X2 、Y2、M、N)。
    } 
    ( - 1> = 0 && STS [I]、[J - 1] '' J == &&訪問[I]、[J-1] ==偽)なら、{ 
        1 - sum4 = 1 + DFS(I、J X2、Y2、M、N)。
    } 
    minValue4(SUM1、SUM2、SUM3、sum4)を返します。
//戻り分(分(SUM1、SUM2)、分(SUM3、sum4))。
} 
minValue4 INT(INT SUM1、SUM2 INT、INT SUM3、INT sum4){ 
    IF(SUM1 == 0){ 
      リターンminValue3(SUM2、SUM3、sum4)。
    }そうであれば(SUM2 == 0){ 
        リターンminValue3(SUM1、SUM3、sum4)。
    }そうであれば(SUM3 == 0){
        minValue3(SUM1、SUM2、sum4)を返します。
      }他{ 
          戻りSUM1。
      }
        minValue3(SUM1、SUM2、SUM3)を返します。
    }他{ 
        戻り分(分(SUM1、SUM2)、分(SUM3、sum4))。
    } 
} 
int型minValue3(INT SUM1、SUM2 INT、INT SUM3){ 
    IF(SUM1 == 0){ 
        リターンminValue2(SUM2、SUM3)。
    }そうであれば(SUM2 == 0){ 
        リターンminValue2(SUM1、SUM3)。
    }そうであれば(SUM3 == 0){ 
        リターンminValue2(SUM1、SUM2)。
    } {他
        戻り分(SUM1、分(SUM2、SUM3))。
    } 
} 
int型minValue2(INT SUM1、SUM2 INT){ 
      IF(SUM1 == 0){ 
          戻りSUM2。
}

  

おすすめ

転載: www.cnblogs.com/zjf-293916/p/12090180.html