计蒜客 蓝桥模拟 F. 结果填空:数独
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
int n;
int f[][];///记录每个位置的值 -1表示需要填
int check(int x,int y,int k) {
for(int i = ;i < ;i ++) {
if(i != x && f[i][y] == k)return ;
if(i != y && f[x][i] == k)return ;
}
int xx,yy;
for(int i = ;i < ;i ++) {
xx = x / * + i;
for(int j = ;j < ;j ++) {
yy = y / * + j;
if(!(xx == x && yy == y) && f[xx][yy] == k)return ;
}
}
return ;
}
void dfs(int x,int y) {//x代表行,y代表列,分别从0-8共9行(列)
if(x == ) {///x范围已过已经把表格填了一遍了 输出结果并返回
for(int i = ;i < ;i ++) {
for(int j = ;j < ;j ++) {
cout<<f[i][j]<<' ';
}
cout<<endl;
}
system("pause");
return;
}
int xx = x,yy = y;
f[x][y] = ;///如果保持-1 下面循环不会进行 循环后会恢复为-1
while(f[xx][yy] != -) {
if(xx >= )break;
xx = xx + (yy + ) / ,yy = (yy + ) % ;///每循环一次yy+1,也就是从当前(x,y)的位置往右一行一行的遍历 找到下一个需要填的位置
}
f[x][y] = -;
for(int i = ;i <= ;i ++) {
if(check(x,y,i)) {//当前填i可行的话 就dfs下一个需要填的位置(xx,yy)
f[x][y] = i;
dfs(xx,yy);
f[x][y] = -;//dfs终止表示这种策略不能dfs下去 位置值恢复为-1
}
}
}
int main() {
memset(f,-,sizeof(f));
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
for(int i = ;i < ;i ++) {
for(int j = ;j < ;j ++) {
if(f[i][j] == -)cout<<'*'<<' ';
else cout<<f[i][j]<<' ';
}
cout<<endl;
}
getchar();
dfs(,);
}
计蒜客 蓝桥模拟 F. 结果填空:数独的更多相关文章
- 计蒜客 蓝桥模拟 A. 结果填空:矩阵求和
给你一个从 n×nn \times nn×n 的矩阵,里面填充 111 到 n×nn \times nn×n .例如当 nnn 等于 333 的时候,填充的矩阵如下. 1 1 2 3 2 4 5 ...
- 计蒜客 蓝桥模拟 B.素数个数
用 0,1,2,3⋯70,1,2,3 \cdots 70,1,2,3⋯7 这 888 个数组成的所有整数中,质数有多少个(每个数字必须用到且只能用一次). 提示:以 000 开始的数字是非法数字. 代 ...
- 计蒜客 蓝桥模拟 I. 天上的星星
计算二维前缀和,节省时间.容斥定理. 代码: #include <cstdio> #include <cstdlib> #include <cstring> #in ...
- 计蒜客 蓝桥模拟 H. 封印之门
Floyd算法,最短路,判断a,b是否相等. 代码: #include <cstdio> #include <cstdlib> #include <cstring> ...
- 计蒜客 蓝桥模拟 G. 数列求值
递归式移项得Ai+1 = 2Ai + 2Ci - Ai-1; 1.A2 = 2A1 + 2C1 - A0; 2.A3 = 2A2 + 2C2 - A1; . . . n.An+1 = 2An + 2C ...
- 计蒜客蓝桥杯模拟赛 后缀字符串:STL_map+贪心
问题描述 一天蒜头君得到 n 个字符串 si,每个字符串的长度都不超过 10. 蒜头君在想,在这 n 个字符串中,以 si 为后缀的字符串有多少个呢? 输入格式 第一行输入一个整数 n. 接下来 ...
- 计蒜客蓝桥杯模拟赛五J. 程序设计:放置守卫
在一张 n 行 m 列的方格地图上放置一些守卫,每个守卫能守护上.左.右三个方向上相邻的方格和自己所在的方格.如下图,红色的方格放置守卫,绿色的方格为该守卫守护的区域. 现在要求在地图上放置若干个守卫 ...
- 计蒜客 蓝桥杯模拟 瞬间移动 dp
在一个 n \times mn×m 中的方格中,每个格子上都有一个分数,现在蒜头君从 (1,1)(1,1) 的格子开始往 (n, m)(n,m) 的格子走.要求从 (x_1,y_1)(x1,y1 ...
- 计蒜客 NOIP模拟赛(3) D1T1火山喷发
火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 nnn 个生物分别具有 A1,A2,⋯,An点生命值,一次火山喷发总计 M轮,每轮造成 1点伤害,等 ...
随机推荐
- Detectron系统实现了最先进的物体检测算法https://github.com/facebookresearch/Detectron
,包括Mask R-CNN. 它是用Python编写的,支持Caffe2深度学习框架. 不久前,FAIR才开源了语音识别的工具wav2letter,戳这里看大数据文摘介绍<快讯 | Facebo ...
- js实现两个从input获取到的数字相加引发的问题
从input中获取到的数据是文本类型的,如果不转化类型直接相加会变成字符串的相加. 使用Number()函数可以解决这个问题,如下 var c = Number(a) + Number(b)
- 思科端口聚合的命令是channel-group
锐捷设备的端口聚合命令是: int range f0/1-2 port-group 1 --------------------- == 思科设备的端口聚合 是: int range f0/1-2 c ...
- Java中class的声明
在Java中下面Class的声明哪些是错误的?(A,B,C) A:public abstract final class Test { abstract void method();} B:pub ...
- 利用Git版本控制管理你的项目
准备工作 项目创建完成后,将项目版本控制起来,今后每个版本的迭代会非常清楚,同时也有助于项目进行协同开发. 还有一个十分重要的问题是:项目上线后,线上的运行的程序的配置与线下进行测试的配置文件是不一样 ...
- 阶段3 1.Mybatis_12.Mybatis注解开发_5 mybatis注解建立实体类属性和数据库表中列的对应关系
创建新项目,一对多 复制刚才关闭的项目的文件 复制到们的新项目里面 复制包的依赖 删减相关代码.只保留这三个查询的方法 模糊查询改成传统的占位符的方式 之前是可以自定义实体类的属性字段,和数据库的字典 ...
- 【命令汇总】nmap 使用教程
日期:2019-07-03 21:23:39 更新: 作者:Bay0net 介绍:汇总一下笔记里面的 nmap 使用方式 0x01. 基本信息 Nmap: the Network Mapper - F ...
- 什么是SLF,PSL,MLF,SLO?
受国际经济金融形势不确定性增强以及各种影响流动性的因素波动较大影响,近年来我国银行体系短期流动性供求的波动性有所加大,尤其是当多个因素相互叠加或市场预期发生变化时,有可能出现市场短期资金供求缺口难以通 ...
- Gradle之Gradle 源码分析(四)
Gradle 的启动 constructTaskGraph runTasks finishBuild gradle 脚本如何编译和执 插件调用流程 一.Gradle 的启动 1.1 整体实现图 1.2 ...
- Alert弹出框处理
selenium的API提供了Alert类对alert弹出框的处理的方法,涉及到的方法有text,dismiss(),accept()和send_keys(),在javascript中主要有alert ...