蒟蒻tle两点求助!!!
查看原帖
蒟蒻tle两点求助!!!
305925
Liu45318楼主2020/5/4 14:18

本蒟蒻太菜了,只会用搜索,结果tle两点,还不会剪枝!!!

#include<cstdio>
using namespace std;
int map[401][401],n,m,x,y;
bool p[401][401];
void dp(int,int,int);
int min(int,int);
int main()
{
	scanf("%d%d%d%d",&n,&m,&x,&y);
	dp(x,y,0);
	for (int i=1;i<=n;i++)
	{
		for (int o=1;o<=m;o++)
			if (!map[i][o]&&(i!=x||o!=y)) printf("-1   ");
			else printf("%-5d",map[i][o]);
		printf("\n");
	}
	return 0;
}
void dp(int i,int o,int t)
{
	if ((i>n||o>m)||(i<1||o<1)||(p[i][o]&&map[i][o]<=t)) return;
	p[i][o]=true;
	if (!map[i][o]) map[i][o]=t;
	else map[i][o]=min(map[i][o],t);
	dp(i+2,o+1,t+1);
	dp(i+1,o+2,t+1);
	dp(i-2,o+1,t+1);
	dp(i-1,o+2,t+1);
	dp(i+2,o-1,t+1);
	dp(i+1,o-2,t+1);
	dp(i-1,o-2,t+1);
	dp(i-2,o-1,t+1);
	return;
}
int min(int a,int b)
{
	return a>b ? b:a;
}

大佬来帮忙下呀!!!

2020/5/4 14:18
加载中...