P1535 [USACO08MAR]Cow Travelling S

原题链接

考察:记忆化搜索

思路:

        注意f数组不能初始化为0,然后通过0判定是否搜过.因为不一定能到终点.....

 1 #include <iostream> 
 2 #include <cstring>
 3 using namespace std;
 4 typedef long long LL;
 5 const int N = 110,M = 16;
 6 int n,m,T,sx,sy,ex,ey;
 7 LL f[N][N][M];
 8 char s[N][N];
 9 int xx[4] = {-1,1,0,0},yy[4] = {0,0,-1,1};
10 void dfs(int x,int y,int t)
11 {
12     if(f[x][y][t]!=-1) return;
13     f[x][y][t] = 0;//标记搜过的点 
14     for(int i=0;i<4;i++)
15     {
16         int dx = x+xx[i],dy = y+yy[i];
17         if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&s[dx][dy]!='*'&&t+1<=T)
18         {
19             dfs(dx,dy,t+1);
20             f[x][y][t]+=f[dx][dy][t+1];
21         }
22     }
23 }
24 int main()
25 {
26     scanf("%d%d%d",&n,&m,&T);
27     for(int i=1;i<=n;i++) scanf("%s",s[i]+1);
28     scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
29     memset(f,-1,sizeof f);
30     f[ex][ey][T] = 1;
31     dfs(sx,sy,0);
32     printf("%lld\n",f[sx][sy][0]);
33     return 0;
34 }

 

posted @ 2021-04-13 13:57  acmloser  阅读(70)  评论(0编辑  收藏  举报