蓝桥杯 方格填数(DFS)

思路:暴力DFS,构建一个二维数组来存放填的数,然后直接枚举判断所有的相邻方向是否是连续的数。用sum记录步数,从左往右填,填到3,7时跳到下一行即可。

Code:

#include<iostream>
#include<memory.h>
using namespace std;
typedef long long ll;
const int Max = 1e6 + 5;

int lst[6][6] ;
int b[100];

bool lin(int a, int b)
{
   
	if (abs(a - b) <= 1)return true;
	else return false;
}

int ans = 0;

void dfs(int x, int y, int sum)
{
   
	if (x == 3&&y==4)
	{
   
		ans++;return;
	}
	for (int i = 0;i <= 9;i++)
	{
   
		if (b[i] == 0 && !lin(lst[x - 1][y], i) && !lin(i, lst[x + 1][y]) && !lin(i, lst[x][y - 1]) && !lin(lst[x][y + 1], i) && !lin(i, lst[x + 1][y + 1]) && !lin(i, lst[x - 1][y - 1])&&!lin(i,lst[x+1][y-1])&&!lin(i,lst[x-1][y+1]))
		{
   
			b[i] = 1;
			lst[x][y] = i;
			if (sum == 3)
			{
   
				dfs(2, 1, 4);
			}
			else if (sum == 7)dfs(3, 1, 8);
			else dfs(x, 1+y, sum + 1);	
			b[i] = 0;
			lst[x][y] = -9999;
		}
	}
}

int main()
{
   
	memset(lst, 0x7f, sizeof(lst));
	dfs(1, 2, 1);
	cout << ans;
}

全部评论

相关推荐

兄弟们,实习都是在接各种api,该怎么包装简历
仁者伍敌:感觉我自己做小项目也是各种api啊,我要怎么包装简历
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 13:47
机械打工仔:你自己匿名可以,这么好的公司就别给它匿名了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务