dfs样例过 三个点超时
查看原帖
dfs样例过 三个点超时
295602
奈因楼主2020/7/2 16:58
#include <bits/stdc++.h>
using namespace std;
bool ma[21][21];
bool flag[21][21];
int sx,sy;
int kx[8]={1,2,-1,-2,1,2,-1,-2};
int ky[8]={2,1,2,1,-2,-1,-2,-1};
int px[2]={1,0};
int py[2]={0,1};
int fx,fy;
int zx,zy;
int t;
int n,m,ans;
void dfs(int x,int y)
{
	if(n==x&&m==y)
	{
		ans++;
		return;
	}
	else
	{
for(int i=0;i<=1;i++)
{
int l=px[i]+x;
int r=py[i]+y;
if(l>=0&&r>=0&&l<=n&&r<=m&&!flag[l[r]&&!ma[l][r])
{
flag[l][r]=true;
dfs(l,r);
flag[l][r]=false;
			}
		}
	}
}
int main()
{
	cin>>n>>m>>fx>>fy;
	ma[fx][fy]=true;
	flag[0][0]=true;
	for(int i=0;i<=7;i++)
	{
		zx=fx+kx[i];
		zy=fy+ky[i];
		if(zx>=0&&zy>=0&&zx<=n&&zy<=m)
		ma[zx][zy]=true;
	}
    dfs(0,0);
    cout<<ans;
    return 0;
}
2020/7/2 16:58
加载中...