#不懂虚心请教
查看原帖
#不懂虚心请教
331662
道爷2000楼主2020/5/6 18:11

在题解中看到有佬说深搜在较大值时会超时,但因为一开始马上想到的是深搜,所以用深搜试了试。但是,用题目中给的数据,出来的一直是0。。。

上代码吧。。。。

#include<stdio.h>
int x1,y1,x2,y2,t=0; _//(这里x1,y1为B点坐标,x2,y2为马的坐标,t为路径数)_ 
int a[21][21];
int dfs(int l,int m,int x,int y) _//(这里用l和m分别表示B点的xy坐标)_ 
{
	if(x<=l&&y<=m) _//(首先判断此时点的是否在棋盘界限内)_ 
	{
		if(x==l&&y==m) _//(如果此时到达了B点,路径数t++)_ 
		{
			t++;
		}
		else _//(如果没有到达B点,深搜下去)_ 
		{
			if(x<=l-1&&a[x+1][y]!=1)
			dfs(x1,y1,x+1,y);
			if(y<=m-1&&a[x][y+1]!=0)
			dfs(x1,y1,x,y+1);
		}
	}
	else{
	}
};
int main()
{
	int i,j;
	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
	for(i=0;i<=x1;i++)
	 {
	 	for(j=0;j<=y1;j++)
	 	{
	 		a[i][j]=0;
		}
	 }
	 if((x2+2)<=x1&&(y2+1)<=y1) _//(判断马的势力范围是否在棋盘上,如果在棋盘上,则标记为1)_ 
	 {
	 	a[x2+2][y2+1]=1;
	 }else
	 if((x2+2)<=x1&&(y2-1)>=0)
	 {
	 	a[x2+2][y2-1]=1;
	 }else
	 if((x2-2)>=0&&(y2+1)<=y1)
	 {
	 	a[x2-2][y2+1]=1;
	 }else
	 if((x2-2)>=0&&(y2-1)>=0)
	 {
	 	a[x2-2][y2-1]=1;
	 }else
	 if((x2-1)>=0&&(y2+2)<=y1)
	 {
	 	a[x2-1][y2+2]=1;
	 }else
	 if((x2-1)>=0&&(y2-2)>=0)
	 {
	 	a[x2-1][y2-2]=1;
	 }else
	 if((x2+1)<=x1&&(y2+2)<=y1)
	 {
	 	a[x2+1][y2+2]=1;
	 }else
	 if((x2+1)<=x1&&(y2-2)>=0)
	 {
	 	a[x2+1][y2-2]=1;
	 }else	 
	 dfs(x1,y1,0,0);
	 printf("%d",t);
}
2020/5/6 18:11
加载中...