此题方法多种,我用规范的DFS来求解
题目:方格填数
如下的10个格子,填入0~9的数字。要求:连续的两个数字不能相邻。 
(左右、上下、对角都算相邻)一共有多少种可能的填数方案? 
 

输出

请填写表示方案数目的整数。 
 #include <iostream>
#include <vector>
#include <stdio.h>
#include <queue>
#include <cmath>
using namespace std;
const int ROW = ;
const int COL = ; int my[] = {};
int sum = ;
int num = ; int dd8[][] = {{-,},{,},{,},{,-},{-,},{,},{-,-},{,-}};
int dd[][] = {{-,},{,},{,},{,-}};
vector<vector<int> >sig[];
vector<vector<int> >matrix(ROW,vector<int>(COL,-)); bool check(int i,int j,int number){
if(my[number] == )
return false;
for(int zz = ;zz < ;zz++){
int ii = i + dd8[zz][];
int jj = j + dd8[zz][];
if(ii < ||jj < ||ii >= ROW||jj >= COL)
continue;
if(ii == &&jj ==)
continue;
if(ii == ROW - &&jj == COL - )
continue;
if(abs(matrix[ii][jj] - number) == )
return false;
}
return true;
}
void rightload(){
sig[sum] = matrix;
}
int checkrightload(){
for(int k = ;k < sum;k++){
if(sig[k] == matrix)
return ;
}
return ;
}
void lock(int i,int j,int k){
num--;
my[k] = ;
matrix[i][j] = k;
}
void unlock(int i,int j,int k){
num++;
my[k] = ;
matrix[i][j] = -;
}
void dfs(int i,int j){
for(int zz = ;zz < ;zz++){
int ii = i + dd[zz][];
int jj = j + dd[zz][];
if(ii < ||jj < ||ii >= ROW||jj >= COL)
continue;
if(ii == &&jj ==)
continue;
if(ii == ROW - &&jj == COL - )
continue;
if(matrix[ii][jj] == -){
for(int k = ;k < ;k++){
if(check(ii,jj,k) == true){
lock(ii,jj,k);
if(num == ){
if(checkrightload() == ){
rightload();
sum++;
}
unlock(ii,jj,k);
return;
}
else
dfs(ii,jj);
unlock(ii,jj,k); }
}
}
}
}
int main(){
for(int i = ;i < ;i++){
lock(,,i);
dfs(,);
unlock(,,i);
}
cout << sum <<endl;
return ;
}

DFS(深度优先搜索遍历求合格条件总数)--07--DFS--蓝桥杯方格填数的更多相关文章

  1. DFS+BFS(广度优先搜索弥补深度优先搜索遍历漏洞求合格条件总数)--09--DFS+BFS--蓝桥杯剪邮票

    题目描述 如下图, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)  比如,下面两张图中,粉红色所示部分就是合格的剪取.  请你计算,一共有多少 ...

  2. 第七届 蓝桥杯 方格填数 dfs

    如下的10个格子  填入0~9的数字.要求:连续的两个数字不能相邻. (左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数. 注意:你提交的应该是一个整数,不要填写任何 ...

  3. 蓝桥杯 方格填数 DFS 全排列 next_permutation用法

    如下的10个格子(参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数.注意:你提交的应该是一个 ...

  4. 采用邻接矩阵表示图的深度优先搜索遍历(与深度优先搜索遍历连通图的递归算法仅仅是DFS的遍历方式变了)

    //采用邻接矩阵表示图的深度优先搜索遍历(与深度优先搜索遍历连通图的递归算法仅仅是DFS的遍历方式变了) #include <iostream> using namespace std; ...

  5. DFS(深度优先搜索遍历有向图)-03-有向图-太平洋大西洋水流问题

    给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度.“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界. 规定水流只能按照上.下.左.右四个方向流动,且只能从高 ...

  6. 【算法导论】图的深度优先搜索遍历(DFS)

    关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...

  7. 回溯算法 DFS深度优先搜索 (递归与非递归实现)

    回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题.通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量). 基本思想 将n元问题P的状态空间E表示成 ...

  8. HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  9. HDU 4707 Pet(DFS(深度优先搜索)+BFS(广度优先搜索))

    Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...

随机推荐

  1. 基于金山快盘的Git服务器、快盘+ Git GUI 实现代码版本管理

        Git,这货堪称神器,用了它就再也不想用其他VCS了,就像上了高速就不想再走国道一样. Git的强大之处在于,你可以在局域网内的任何一个共享路径下创建仓库,而不需要运行任何服务.所有的操作都是 ...

  2. vbs操作IE对象

    Dim fso,filepath,i 'Dim ExcelBook,ExcelSheet,MyExcelBook,MyExcelSheet Dim ie Set ie=WScript.CreateOb ...

  3. python生成器三元表达式

    使用yield返回  例如: def test(): yield 1 yield 2 yield 3 yield 4 v = test() print(v.__next__()) print(v.__ ...

  4. 【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

    勘误 有个朋友说:为什么我配置了WebMvcConfigurer,静态资源static依然能访问?! 这里是本人的失误,我在启动类中添加了EnableWebMvc注解(文章里却没有提及,最好的做法是放 ...

  5. insert和delete底层实现的方式

    operator delete ()全局函数原型: /*operator delete: 该函数最终是通过free来释放空间的*/void operator delete(void *pUserDat ...

  6. linux 查看Apache Tomcat日志访问IP前10

    访问日志名:localhost_access_log.2019-01-29.txt 日志格式示例 /Nov/::: +] /Nov/::: +] /Nov/::: +] /Nov/::: +] /No ...

  7. 【转帖】IBM发布全新闪存解决方案,助企业存储架构做减法

    IBM发布全新闪存解决方案,助企业存储架构做减法 http://stor-age.zhiding.cn/stor-age/2020/0227/3124851.shtml 感觉 配图弄错了 FlashS ...

  8. ubuntu用命令行打开vscode

    1.打开终端 2.输入code即可

  9. 吴裕雄--天生自然JAVA数据库编程:执行数据库更新操作

    import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.Statement ; public clas ...

  10. 题解 hdu4624 Endless Spin

    题目链接 题目大意: 有长度为\(n\)的区间,每次随机选择一段(左右端点都是整数)染黑,问期望多少次全部染黑. \(n\leq 50\) 设\(n\)个随机变量\(t_1,...,t_n\).\(t ...