本人用深度优先搜索尝试本题,结果有两个点TLE
.
代码如下:
#include <bits/stdc++.h>
using namespace std;
int m,n,p,q;
int cnt=0;
bool book[21][21];
void dfs(int x,int y)
{
if(x>n) return;
if(y>m) return;
if(x==n && y==m)
{
cnt++;
return;
}
if(book[x][y]==0)
{
book[x][y]=1;
dfs(x+1,y);
dfs(x,y+1);
book[x][y]=0;
}
return;
}
int main()
{
cin>>n>>m>>p>>q;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
book[i][j]=0;
book[p][q]=1;
book[p-1][q+2]=1;
book[p-1][q-2]=1;
book[p+1][q-2]=1;
book[p+1][q+2]=1;
book[p-2][q-1]=1;
book[p-2][q+1]=1;
book[p+2][q-1]=1;
book[p+2][q+1]=1;
dfs(0,0);
cout<<cnt;
return 0;
}
看过题解后发现本题分类为dp.但是本人也在思考:能不能通过优化搜索的方式解决本题呢??
由此,向诸位求助.谢谢!