记录编号 176851 评测结果 AAAAAAAAAA
题目名称 [USACO Mar08] 游荡的奶牛 最终得分 100
用户昵称 Gravatar0 是否通过 通过
代码语言 C++ 运行时间 0.017 s
提交时间 2015-08-10 07:27:42 内存使用 1.24 MiB
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <queue>
#include <iostream>

#define MAXN 101UL

using namespace std;

int n,m,t;

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

struct Node {
	int x,y,step;
};

int f[MAXN][MAXN][18];
bool z[MAXN][MAXN][18];
int map[MAXN][MAXN];
char a[MAXN][MAXN];
int chu_x,chu_y;
int zd_x,zd_y;
queue<Node> q;

void bfs() {
	while(!q.empty()) {
		Node ai = q.front();
		q.pop();
		z[ai.x][ai.y][ai.step] = 0;
		for(int i = 0; i < 4; ++i) {
			int qx = ai.x + gx[i];
			int qy = ai.y + gy[i];
			int qstep = ai.step+1;
			if(qx < 1 || qx > n) continue;
			if(qy < 1 || qy > m) continue;
			if(map[qx][qy] == 1) continue;
			f[qx][qy][qstep] += f[ai.x][ai.y][ai.step];
			if(qstep >= t) continue;
			if(z[qx][qy][qstep]) continue;
			z[qx][qy][qstep] = 1;
			Node pos;
			pos.x = qx;
			pos.y = qy;
			pos.step = qstep;
			q.push(pos);
		}
	}

}

int main() {
	int i,j;
	freopen("ctravel.in","r",stdin);
	freopen("ctravel.out","w",stdout);
	cin >> n >> m >> t;
	for(i = 1; i <= n; ++i)
		for(j = 1; j <= m; ++j) {
			cin >> a[i][j];
		}
	cin >> chu_x >> chu_y >> zd_x >> zd_y;
	for(i = 1; i <= n; ++i)
		for(j = 1; j <= m; ++j) {
			if(a[i][j] == '.')
				map[i][j] = 0;
			if(a[i][j] == '*')
				map[i][j] = 1;
		}
	Node temp;
	temp.x = chu_x;
	temp.y = chu_y;
	temp.step = 0;
	f[chu_x][chu_y][0] = 1;
	z[chu_x][chu_y][0] = 1;
	q.push(temp);
	bfs();
	cout << f[zd_x][zd_y][t];
}