#4126. 深搜——连通性问题模版——T1216 红与黑填空

深搜——连通性问题模版——T1216 红与黑填空

#include iostream

#include cstring

using namespace std;

char map[25][25];

bool v[25][25];

int xx[4]={-1,1,0,0};

int yy[4]={0,0,-1,1};

int n,m,sum=0,sx,sy;

void dfs({{ input(1) }} /* 填空1:传入当前格子的横纵坐标 */){

    sum++;

    for(int i=0;i<={{ input(2) }} /* 填空2:循环四个方向 */;i++){

        int nx = x+xx[{{ input(3) }}] ; 填空3 新的方向

        int ny = y+yy[i];

        if(nx<1 or ny<1 or nx>n or ny>m){

            {{ input(4) }}; /* 填空4 越界 */

        }

        if(v[nx][ny]){

            continue;

        }

        if(map[nx][ny]=='#'){

            continue;

        }

        v[nx][ny]=true;

        dfs({{ input(5) }}); /* 填空5 继续向相邻格子深搜 */

    }

}

int main(){

    while(1){

        cin >> m >> n;

        if(n == 0 and m == 0){

            return 0;            

        }

        for(int i=1;i<={{ input(6) }} ;i++){

填空6 行

            for(int j=1;j<={{ input(7) }} ;j++){ 填空7 列

                cin >> map[i][j];

                if(map[i][j]=='@'){

                    sx=i;

                    sy=j;

                }

            }

        }

        v[sx][sy]=true;

        dfs({{ input(8) }}); /* 填空8 从起点开始搜索 */

        cout << sum << endl;

        sum = 0;

        {{ input(9) }}(vis,0,{{ input(10) }}); /* 填空9 清空标记数组,为下一组输入做准备 */

    }

    return 0;

}