一、输入:

输入一个3x3数独,字符'.'代表空
输入三个宫的域,每个宫包括三个位置,[0,0]表示0行0列

二、输出要求:

1.每个宫里最终123各出现一次,

2.数独中的行列里不出现重复字符;

输出满足条件的解

思想:先根据输入找到所有行列不重复的数独,再判断三个宫是否满足不重复;

  1 #include <iostream>
2 #include <bits/stdc++.h>
3 using namespace std;
4 int a[3][3];//存储三个宫区域
5 int cnt;//记录满足的个数
6 bool isValid(int row, int col, char val, vector<vector<char>>& board) {
7 for (int i = 0; i < 3; i++) { // 判断行里是否重复
8 if (board[row][i] == val) {
9 return false;
10 }
11 }
12 for (int j = 0; j < 3; j++) { // 判断列里是否重复
13 if (board[j][col] == val) {
14 return false;
15 }
16 }
17 return true;
18 }
19 bool func(vector<vector<char>> board){
20 for (int i = 0; i<3;i++){ //第i个宫
21 int vec[3];
22 memset(vec,0,sizeof(vec));
23 for (int j = 0; j < 3;j++){
24 if (vec[board[a[i][j]/3][a[i][j]%3]-'1']==1){
25 return false;
26 cout <<"失败"<< a[i][j] << endl;
27 }
28 vec[board[a[i][j] / 3][a[i][j] % 3]-'1'] = 1;
29 }
30 }
31 return true;
32 }
33
34 bool backtracking(vector<vector<char>>& board) {
35 int x, y;
36 for (int i = 0; i < board.size(); i++) { // 遍历行
37 for (int j = 0; j < board[0].size(); j++) { // 遍历列
38 x = i;
39 y = j;
40 if (board[i][j] != '.') continue;
41 for (char k = '1'; k <= '3'; k++) { // (i, j) 这个位置放k是否合适
42 if (isValid(i, j, k, board)) {
43 board[i][j] = k; // 放置k
44 if (backtracking(board)) {
45 return true; // 如果找到合2 适一组立刻返回
46 }
47 board[i][j] = '.'; // 回溯,撤销k
48 }
49 }
50 return false; // 9个数都试完了,都不行,那么就返回false
51 }
52 }
53 if(x==2&&y==2){ //判断是否满足宫
54 if(func(board)){
55 cout << "cnt++:" << endl;
56 cnt++;
57 for(int i=0;i<3;i++){
58 for(int j=0;j<3;j++){
59 cout<<board[i][j]<<" ";
60 }
61 cout << endl;
62 }
63 }
64 /*for(int i=0;i<3;i++){
65 for(int j=0;j<3;j++){
66 cout<<board[i][j]<<" ";
67 }
68 cout << endl;
69 }*/
70 }
71 return false;
72 //return true; // 遍历完没有返回false,说明找到了合适棋盘位置了
73 }
74
75 int main() {
76 cnt = 0;
77 vector<vector<char>>board={{0,0,0},{0,0,0},{0,0,0}};
78 for(int i=0;i<3;i++){
79 for(int j=0;j<3;j++){
80 char ch;
81 cin>>ch;
82 board[i][j]=ch;
83 //cout<<ch<<endl;
84 }
85 }
86 int x, y;
87 for (int i = 0; i < 3;i++){
88 for (int j = 0; j < 3;j++){
89 cin >> x >> y;
90 a[i][j] = 3 * x + y;
91 //cout << 3 * x + y;
92 }
93 }
94 cout << endl;
95 cout << "x" << endl;
96 backtracking(board);
97 int coun = cnt;
98 cout << "answer " << cnt << endl;
99 return 0;
100 }

测例1:

输入

..3 ... ...
0 0 1 0 1 1
0 1 0 2 1 2
2 0 2 1 2 2

输出:

cnt++:
1 2 3
2 3 1
3 1 2
cnt++:
2 1 3
1 3 2
3 2 1
answer 2

  

网易互娱23届实习笔试_3x3锯齿数独的更多相关文章

  1. 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场 C

    偶尔碰到这题,简单数位DP题,然而我已生疏了…… 这次算是重新想到的,看来对DP的理解有增进了…… dp[i][j][k],表示前i为,mod为j,是否出现2.3.5的剩下的数位可组成的数字.答案就是 ...

  2. 2017 网易游戏互娱游戏研发4.21(offer)

    网易游戏互娱(offer) 去年这个时候就参加过网易游戏的实习生招聘,到今年总共收到了4次拒信.不过这次运气好,终于get了最想要的offer.去年实习生互娱笔试挂,秋招笔试挂,今年春招互娱投了连笔试 ...

  3. 人人,金山西山居,腾讯互娱,微信,网易游戏offer及面经

    转自:http://www.itmian4.com/forum.php?mod=viewthread&tid=3985 首先感谢师兄在两年前发的贴([天道酬勤] 腾讯.百度.网易游戏.华为Of ...

  4. 最新 三七互娱java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.三七互娱等10家互联网公司的校招Offer,因为某些自身原因最终选择了三七互娱.6.7月主要是做系统复习.项目复盘.Leet ...

  5. 2019 三七互娱java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.三七互娱等公司offer,岗位是Java后端开发,因为发展原因最终选择去了三七互娱,入职一年时间了,也成为了面 ...

  6. 网易实习笔试真题C/C++

    刚做的时候根本就没有想到解题思路,刚好看到了别人的思路,自己写了一下.里面对unordered_map及vector二维数组的建立很灵活,另外区别了一下map,unordered_map,hash_m ...

  7. 2018春招实习笔试面试总结(PHP)

    博主双非渣本计算机软件大三狗一枚,眼看着春招就要结束了,现将自己所经历的的整个春招做一个个人总结. 首先就是关于投递计划,博主自己整理了一份各大公司的春招信息,包括网申地址,开始时间,结束时间,以及自 ...

  8. hihocoder 网易游戏2016实习生招聘在线笔试 解题报告

    比赛笔试链接:http://hihocoder.com/contest/ntest2015april/problems 题目就不贴了. 1.推箱子. 思路:纯模拟. 代码(28MS): #includ ...

  9. 网易2019校招C++研发工程师笔试编程题

    丰收? (忘了题目了QAQ) 题目描述: 又到了丰收的季节,恰逢小易去牛牛的果园里游玩. 牛午常说他对整个果园的每个地方都了如指掌,小易不太相信, 所以他想考考牛牛. 在果园里有N堆苹果,每堆苹果的数 ...

随机推荐

  1. Java中静态变量与非静态变量的区别

    感谢大佬:https://www.cnblogs.com/liuhuijie/p/9175167.html ①java类的成员变量有俩种: 一种是被static关键字修饰的变量,叫类变量或者静态变量 ...

  2. JAVA面向对象复习

    对象:真实存在的唯一的事物. 类: 同一种类型的事物公共属性与公共行为的抽取. java面向对象语言: 核心思想: 找适合的对象做适合的事情. 找对象的方式: 方式一: sun已经定义好了很多了类,我 ...

  3. endl与\n的用法区别

    学习C++的时候,老师说换行有两种写法. 1 //方法一 2 3 std::cout<<"你好!\n李华"; 4 5 //方法二 6 7 std::cout<&l ...

  4. 怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案

    第一种(亲测可以) 在代码当中的Application启动类当中加入代码 @PostConstruct void started() { //时区设置:中国上海 //time.zone: " ...

  5. Kubernetes 集群和应用监控方案的设计与实践

    目录 Kubernetes 监控 监控对象 Prometheus 指标 实践 节点监控 部署 Prometheus 部署 Kube State Metrics 部署 Grafana 应用如何接入 Pr ...

  6. WMI简介和Event驻留

      WMI (Windows Management Instrumentation,Windows管理规范) 从Windows 2000开始被包含于操作系统后,就一直是Windows操作系统的一部分. ...

  7. LNK善意利用

    lnk   lnk在Windows平台下是快捷方式,可以指向其他目录下的文件,并且可以传递参数.现在有些恶意活动会恶意利用lnk,执行恶意代码.   关于lnk的格式,可以使用010 editor的模 ...

  8. LinuxCPU性能工具总结

    一.根据性能指标找工具 二.根据工具查性能指标

  9. 数据分析实际案例之:pandas在餐厅评分数据中的使用

    目录 简介 餐厅评分数据简介 分析评分数据 简介 为了更好的熟练掌握pandas在实际数据分析中的应用,今天我们再介绍一下怎么使用pandas做美国餐厅评分数据的分析. 餐厅评分数据简介 数据的来源是 ...

  10. Kafka与ELK实现一个日志系统

    1.概述 客户端应用程序在运行过程中可能会产生错误,例如调用服务端接口超时.客户端处理业务逻辑发生异常.应用程序突然闪退等.这些异常信息都是会产生日志记录的,并通过上报到指定的日志服务器进行压缩存储. ...