本蒟蒻太菜了,只会用搜索,结果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;
}