中间两个点TLE了,最后一个点过了,这是正常的TLE吗?
查看原帖
中间两个点TLE了,最后一个点过了,这是正常的TLE吗?
853953
ljx_gkx楼主2023/3/31 20:10
#include<iostream>

using namespace std;
const int N = 23;
int st[N][N];
int dx[] = {-2, -2, -1, 1, 2, 2, 1, -1};
int dy[] = {-1, 1, 2, 2, 1, -1, -2, -2};
int b1, b2, m1, m2;
int ans;

void dfs(int x, int y)
{
	if (x == b1 && y == b2)
	{
		ans ++;
		return ;
	}
	
	//两个方向上去搜索!
	if (x+1<=b1 && st[x+1][y]==0)	//没有越界,并且下一个点不是障碍物!	往下走!
		dfs (x+1, y);
		
	if (y+1<=b2 && st[x][y+1]==0)	//往右走 
		dfs (x, y+1);
}

int main()
{
	cin >> b1 >> b2 >> m1 >> m2;    //输入的是B点坐标及马的坐标!
	st[m1][m2] = true;  //标记为true!
    
    //标记由该马所引发的所有障碍物!
    //共8个方向!
    for (int i=0; i < 8; i ++)
    {
        int a = m1 + dx[i], b = m2 + dy[i];
        if (a >= 0 && a <= b1 && b >= 0 && b <= b2)
            st[a][b] = 1;
    }
    
    dfs (0, 0);
    cout << ans << endl;
    
	return 0;
}
2023/3/31 20:10
加载中...