| 比赛 | 暑假培训B班二测 | 评测结果 | AAAWAA | 
    | 题目名称 | 返回住所 | 最终得分 | 83 | 
    | 用户昵称 | 王者自由 | 运行时间 | 0.002 s | 
    | 代码语言 | C++ | 内存使用 | 0.29 MiB | 
    | 提交时间 | 2012-07-22 11:36:53 | 
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10;
int xy[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
int r, c, s, k;
char G[N][N];
bool v[N][N];
void DFS(int x, int y, int d) {
    if(x == r && y == c) {
        if(d <= k) s++;
        v[x][y] = 0;
    } else for(int i=0; i<4; i++) {
        int X = x+xy[i][0], Y = y+xy[i][1];
        if(X < 1 || X > r || Y < 1 || Y > c) continue;
        if(G[X][Y] == 'T' || v[X][Y]) continue;
        v[X][Y] = 1;
        DFS(X, Y, d+1);
        v[X][Y] = 0;
    }
}
int main() {
    freopen("backbarn.in", "r", stdin);
    freopen("backbarn.out", "w", stdout);
    scanf("%d %d %d\n", &r, &c, &k);
    for(int i=1; i<=r; i++)
        scanf("%s\n", G[i]+1);
    DFS(1, 1, 1);
    printf("%d\n", s);
    return 0;
}