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; }