蓝桥杯----玩具蛇 DFS

  • 蓝桥杯----玩具蛇 DFS
    蓝桥杯----玩具蛇    DFS
    这是一道蓝桥杯国赛真题,属于典型地DFS算法题。

1.选玩具蛇第一节放置的位置,显然4x4的格子都可以。
2.从玩具蛇第一节出发,调用搜索算法。
3.条件 相邻两节成直线或90° 是为下一节放置的方向只能为相邻的上下左右 四个格子,其中已放过的格子,以及越界时不放置。

#include "iostream"
using namespace std;

int dx[4]={1,0,-1,0};	//方向控制 
int dy[4]={0,1,0,-1};
	int a[4][4]={0};
int n=0;
int main()
{
	void dfs(int stay,int x,int y);

	int stay=0;	//玩具蛇共16节 已放置了stay节 
	int i,k;
	for(i=0;i<4;i++)	//对4x4的格子 枚举玩具蛇第一个步放置的所有可能。 
	{
		for(k=0;k<4;k++)		
		{
			a[i][k]=1;	//对已放置的格子进行标记 
			dfs(1,i,k);
			a[i][k]=0;	//清除标记 
		}
	}
	cout<<n;
	return 0;
}
void dfs(int stay,int x,int y)	//x,y相当于正在放置的格子的坐标 
{
	
	int tx,ty;
	if(stay==16)	//递归终止条件 
	{

		n++;
		return;
	}

	for(int i=0;i<4;i++)	//尝试向四个方向放置 
	{
		tx=x+dx[i];			//方向 
		ty=y+dy[i];
		if(a[tx][ty]==1||tx<0||tx>3||ty<0||ty>3)		//该格子不可放置 或越界 跳过该方向 
		continue;
		a[tx][ty]=1;	// 对已放置的格子进行标记 
		dfs(stay+1,tx,ty);
		a[tx][ty]=0;	//清除标记 
		
	}
}
上一篇:考研英语 大学英语


下一篇:[题解]CSP-风险人群筛查(线性部分)