一、输入:

输入一个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程序出现oom如何解决?什么场景下会出现oom?

    1.什么是oom? OOM,全称"Out Of Memory",翻译成中文就是"内存用完了",来源于java.lang.OutOfMemoryError. 当J ...

  2. 配置samba共享,实现/www目录共享

    一.samba服务器 1.安装samba包 # yum -y install samba 2.创建用户组 # groupadd -r admins # useradd -s /sbin/nologin ...

  3. treevalue——Master Nested Data Like Tensor

    首先,请和我一起高呼--"treevalue--通用树形结构建模工具 + 极简树形结构编程模型". 咳咳,好久没更新了,这一次是真的好久不见,甚是想念.在之前的三期中,关于 tre ...

  4. 《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)

    1.简介 在自动化测试,有些我们的测试数据是放到excel文件中,尤其是在做数据驱动测试的时候,所以需要懂得如何操作获取excel内的内容.由于java不像python那样有直接操作Excle文件的类 ...

  5. Python基础(Day1)

    一.Python的简介  1.Python的诞生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发 ...

  6. 2022年了有哪些值得推荐的.NET ORM框架?

    前言: 最近有很多同学问我.NET方面有哪些好用的ORM框架,我觉得这方面的介绍网上应该会介绍的比较全面文章,于是我想搜一篇全面的介绍文章发给他们结果我发现网上说来说去基本上就是那几个,于是就有了这篇 ...

  7. python进阶(25)协程

    协程的定义 协程(Coroutine),又称微线程,纤程.(协程是一种用户态的轻量级线程) 作用:在执行 A 函数的时候,可以随时中断,去执行 B 函数,然后中断B函数,继续执行 A 函数 (可以自动 ...

  8. linux历史命令审计

    一.添加历史命令记录 1.首先在/etc/profile中添加 export HISTORY_FILE=/var/log/Command/Command.log export PROMPT_COMMA ...

  9. [题解]hihoCoder挑战赛18——题目1 神奇字符串

    题目地址:http://hihocoder.com/problemset/problem/1264 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 我们说两个字符串是非常 ...

  10. 业务人员可以进行自助ETL操作?这款BI工具你值得拥有

    ​ETL是什么? ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.E ...