0
已解决
3719 奔跑的小明
题目描述 Description
在一个m*n的游乐场内,有一群小朋友在玩游戏。游乐场中的一些位置分布着一些设施,阻挡住了小朋友们的道路。现在小明起始在(a,b)这个位置,经过时间为t分钟的疯狂得来回奔跑之后,最终小明停留在了(x,y)这个位置气喘吁吁。已知每分钟小明可以朝上下左右四个方向中的一个移动一步,并且小明可能会来回跑动。请问小明有多少种可能的路线从(a,b)跑到(x,y)。求出可能的路线总数s。
输入描述 Input Description
第一行,三个整数,m n t
接下来m行,每行n个字符,每个字符为'.'或'*',分别表示平地和设施,设施不能通过
最后一行,四个整数,a b x y
输出描述 Output Description
一个整数s,表示可能的路线的总数
样例输入 Sample Input
4 5 6 ...*. ...*. ..... ..... 1 3 1 5
样例输出 Sample Output
1
数据范围及提示 Data Size & Hint
2 ≤ m,n ≤ 100, 0<t ≤ 15
巡逻,测试数据加强版
为什么只有40,求大佬给出动归的AC代码
#include <iostream>
#include <cstdio>
using namespace std;
char a[1111][1111];
int m,n,t,ans=0;
int x1,y1,x2,y2;
int dir[5][2]={{0},{-1,0},{0,-1},{1,0},{0,1}};
int dfs(int x1,int y1,int x2,int y2,int cnt)
{
if(cnt>t) return 0;
if(cnt==t&&x1==x2&&y1==y2)
{
ans++;
return 0;
}
for(int i=1;i<=4;i++)
{
int nx=x1+dir[i][0],ny=y1+dir[i][1];
if(nx>=1&&nx<=m&&ny>=1&&ny<=n&&a[nx][ny]=='.')
dfs(nx,ny,x2,y2,cnt+1);
}
}
int main()
{
cin>>m>>n>>t;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
cin>>x1>>y1>>x2>>y2;
dfs(x1,y1,x2,y2,0);
cout<<ans<<endl;
}
