#include <fstream>
#include <vector>
#include <iostream>
#include <string>
using namespace std; bool check_sudoku(const vector<int>& input);
int coordtoidx(int row, int col);
void extract_row(const vector<int>& input, int row, vector<int>& output);
void extract_col(const vector<int>& input, int col, vector<int>& output);
void extract_subsquare(const vector<int>& input, int row, int col, vector<int>& output);
bool once(int num,const vector<int>& input); int main()
{
ifstream infile;
cout<<"Please input a input file name"<<endl;
string infilename;
cin>>infilename;
infile.open(infilename);
if (!infile.is_open())
{
cout<<"could not open input file"<<endl;
system("pause");
exit(EXIT_FAILURE);
} vector<int> input;
int number;
while (infile>>number)
{
input.push_back(number);
}
infile.close(); bool isOK=check_sudoku(input);
if (isOK)
{
cout<<"valid"<<endl;
}
else
{
cout<<"invalid"<<endl;
} system("pause");
return ;
} bool check_sudoku(const vector<int>& input)
{
for (int i=; i<; i++)
{
vector<int> rowNumbers;
extract_row(input,i,rowNumbers);
for (int m=;m<;m++)
{
bool onceFlag=once(m,rowNumbers);
if(!onceFlag)
{
return false;
}
}
}
for (int j=; j<; j++)
{
vector<int> colNumbers;
extract_col(input,j,colNumbers);
for (int m=;m<;m++)
{
bool onceFlag=once(m,colNumbers);
if(!onceFlag)
{
return false;
}
}
}
for (int p=; p<; p=p+)
for (int q=; q<; q=q+)
{
vector<int> subsquareNumbers;
extract_subsquare(input,p,q,subsquareNumbers);
for (int m=;m<;m++)
{
bool onceFlag=once(m,subsquareNumbers);
if(!onceFlag)
{
return false;
}
}
}
return true;
} int coordtoidx(int row, int col)
{
return row*+col;
} void extract_row(const vector<int>& input, int row, vector<int>& output)
{
for (int c=; c<;c++)
{
int idx=coordtoidx(row,c);
output.push_back(input.at(idx));
}
} void extract_col(const vector<int>& input, int col, vector<int>& output)
{
for (int r=; r<;r++)
{
int idx=coordtoidx(r,col);
output.push_back(input.at(idx));
}
} void extract_subsquare(const vector<int>& input, int row, int col, vector<int>& output)
{
for (int r=row; r<row+;r++)
for (int c=col; c<col+;c++)
{
int idx=coordtoidx(r,c);
output.push_back(input.at(idx));
}
} bool once(int num, const vector<int>& input)
{
int count=;
for (unsigned int i=; i<input.size(); i++)
{
if (input.at(i)==num)
{
count++;
}
}
return count==?true:false;
}

数独检测器:帝国理工C++作业的更多相关文章

  1. 2048控制台程序:一份帝国理工C++作业

    #include <fstream> #include <vector> #include <iostream> #include <string> u ...

  2. Java这些冷知识你知道吗?

    1)jvm有很多种,其实jvm是一个标准,sun做的那个叫hotspot,作者就是后来v8的作者lars bak,其他公司也做过jvm,其中做得比较好的有bea的jrockit,其他的包括ibm的r9 ...

  3. KinectFusion解析

      三维重建是指获取真实物体的三维外观形貌,并建立可复用模型的一种技术.它是当下计算机视觉的一个研究热点,主要有三方面的用途:1)相比于二维图像,可以获取更全面的几何信息:2)在VR/AR中,建立真实 ...

  4. [paper]MaskFusion: Real-Time Recognition, Tracking and Reconstruction of Multiple Moving Objects

    Before 近期在调研关于RGBD在室内移动机器人下的语义导航的研究.目前帝国理工的Andrew Davison在这边有两个团队在研究,分别是Fusion++ 和 这篇 MaskFusion.这篇是 ...

  5. 上采样和PixelShuffle(转)

    有些地方还没看懂, mark一下 文章来源: https://blog.csdn.net/g11d111/article/details/82855946 去年曾经使用过FCN(全卷积神经网络)及其派 ...

  6. flask框架(二):简单的登录demo

    一:main.py # -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/3 22:58 from flask import ...

  7. 83 项开源视觉 SLAM 方案够你用了吗?

    作者:吴艳敏 来源:83 项开源视觉 SLAM 方案够你用了吗? 前言 1. 本文由知乎作者小吴同学同步发布于https://zhuanlan.zhihu.com/p/115599978/并持续更新. ...

  8. CEO的行为风格会影响公司业绩吗?

    中国的两大互联网巨头--腾讯和阿里,创始人的风格非常不同.在公众面前,马云的形象是高谈阔论,而马化腾则显得较为低调.在公司管理上,马云不插手具体事务,而是站在高处务虚,抓战略.抓文化,而马化腾则是腾讯 ...

  9. MindSpore:自动微分

    MindSpore:自动微分 作为一款「全场景 AI 框架」,MindSpore 是人工智能解决方案的重要组成部分,与 TensorFlow.PyTorch.PaddlePaddle 等流行深度学习框 ...

随机推荐

  1. C#3.0 特性

    C#3.0特性 隐式类型的本地变量和数组 对象初始值设定项 集合初始值设定项 扩展方法 匿名类型 lambda表达式 查询关键字 自动实现的属性 分布方法定义 lambda表达式与表达式树 https ...

  2. 2015baidu复赛2 连接的管道(mst && 优先队列prim)

    连接的管道 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. cf.301.D. Bad Luck Island(dp + probabilities)

    D. Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. SQL按指定文字顺序进行排序(中文或数字等)

    在有些情况下我们需要按指定顺序输出数据,比如选择了ID in(3,1,2,5,4)我们希望按这个3,1,2,5,4的顺序输出,这样只使用order by ID是无法实现的, 但是我们可以使用order ...

  5. 15天学会jquery

    第二章 15 Days of jQuery 比window.onload 更快一些的载入 window.onload()是传统javascript 里一个能吃苦耐劳的家伙.它长久以来一直 被程序员们作 ...

  6. iOS开发——多线程篇——快速生成沙盒目录的路径,多图片下载的原理、SDWebImage框架的简单介绍

    一.快速生成沙盒目录的路径 沙盒目录的各个文件夹功能 - Documents - 需要保存由"应用程序本身"产生的文件或者数据,例如:游戏进度.涂鸦软件的绘图 - 目录中的文件会被 ...

  7. JavaScript的作用域与作用域链

    作用域 作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.可以说,变量和函数在什么时候可以用,什么时候被摧毁,这都与作用域有关. JavaScript中,变量的作用域有全局 ...

  8. Unity 手指上下左右滑动的判定

    using UnityEngine; using System.Collections; public class jarodInputController : MonoBehaviour { pri ...

  9. git 使用入门篇

    最近准备给同事培训git,发现了一个不错的资源,在这里:http://www.gitguys.com/topics/creating-a-shared-repository-users-sharing ...

  10. Java文件读写操作指定编码方式防乱码

    读文件:BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够大了. 通常,Re ...