直接bfs的时候广搜就行了。。设f[i,j,k]表示走到i,j用了k时间。。
一万年没打过bfs的我表示,那个上下左右的常量都算错了。。RE了一次,1A率捉急啊。。
#include<iostream>
#include<cstdio>
//#include<cmath>
#include<algorithm>
#include<cstring>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
typedef long long ll;
const int inf=1e9;
const int N=305;
int f[N][N][20];
int d[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
char map[N][N];
int x1,y1,x2,y2,t,n,m;
int main()
{
scanf("%d%d%d",&n,&m,&t);
fo(i,1,n)
scanf("%s",map[i]+1);
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
f[x1][y1][0]=1;
fo(i,1,t)
{
fo(j,1,n)
fo(k,1,m)
{
if (map[j][k]=='.')
{
fo(l,0,3)
{
int x=j+d[l][0];
int y=k+d[l][1];
if (map[x][y]=='.')
f[j][k][i]+=f[x][y][i-1];
}
}
}
}
printf("%d\n",f[x2][y2][t]);
}