数独检测器:帝国理工C++作业

#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 0;
}

bool check_sudoku(const vector<int>& input)
{
    for (int i=0; i<9; i++)
    {
        vector<int> rowNumbers;
        extract_row(input,i,rowNumbers);
        for (int m=1;m<10;m++)
        {
            bool onceFlag=once(m,rowNumbers);
            if(!onceFlag)
            {
                return false;
            }
        }
    }
    for (int j=0; j<9; j++)
    {
        vector<int> colNumbers;
        extract_col(input,j,colNumbers);
        for (int m=1;m<10;m++)
        {
            bool onceFlag=once(m,colNumbers);
            if(!onceFlag)
            {
                return false;
            }
        }
    }
    for (int p=0; p<9; p=p+3)
        for (int q=0; q<9; q=q+3)
    {
        vector<int> subsquareNumbers;
        extract_subsquare(input,p,q,subsquareNumbers);
        for (int m=1;m<10;m++)
        {
            bool onceFlag=once(m,subsquareNumbers);
            if(!onceFlag)
            {
                return false;
            }
        }
    }
    return true;
}

int coordtoidx(int row, int col)
{
    return row*9+col;
}

void extract_row(const vector<int>& input, int row, vector<int>& output)
{
    for (int c=0; c<9;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=0; r<9;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+3;r++)
        for (int c=col; c<col+3;c++)
    {
        int idx=coordtoidx(r,c);
        output.push_back(input.at(idx));
    }
}

bool once(int num, const vector<int>& input)
{
    int count=0;
    for (unsigned int i=0; i<input.size(); i++)
    {
        if (input.at(i)==num)
        {
            count++;
        }
    }
    return count==1?true:false;
}
时间: 2024-07-31 21:16:44

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

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

#include <fstream> #include <vector> #include <iostream> #include <string> using namespace std; //打印输出数组内容到窗口 void print_square(const vector<int> &square); //设置默认的初始状态数组,最后一个数是2,其他都是0 void set_default_square(vector<int

五十万年薪的人是怎么过日子的?

五十万年薪的人是怎么过日子的?修改 由于各行各业及自己本身原有基础不一样,可能大家的回答没有横向可比性,希望大家能够在回答中包含以下信息:1 自己年龄,从事的行业岗位,属于什么职级2 受过的教育水平3 父母能够在你刚开始工作时提供多大帮助4 自己在哪线城市工作 关于生活状态的其他问题:你认为怎样的生活状态是最理想的?年收入50元的人是怎么过日子的?一万年薪的人都是怎么过日子的?十万年薪的人都是怎么过日子的?百万年薪的人都是怎么过日子的?千万年薪的人都是怎么过日子的?修改 举报9 条评论 分享 •

关于,嗯,过去的一切……

不知为什么,今天特别烦,学不进去. 关于软工的开发,关于课内分组的Team 软工开发基本花了一个月吧,中间加上C++爬虫莫名其妙的BUG,耽误了很多事情.课题组一个月没去,脾气很好的老师都有意见了o(╯□╰)o. 总体,还算可以,UI比较垃圾. 5个人的团队,里面还有若干不干活的酱油o(╯□╰)o,而且是那种一直说自己在做,最后给很多时间也给东西的酱油,整个团队的进度因为个别人一直耽误,连报告都不肯写--也有很实在,但是干活很细的问题也拿来问的,好累--最后,好不容易有个4天假期,但是2天花在报

测试人机问答系统智能性的3760个问题

本文给出了3760个问题,这些问题来自于广大网友对QuestionAnsweringSystem的测试. 在面对这些问题的时候,我们人类是怎么思考回答的呢? 对我们来说,回答这些问题是一个很自然甚至很简单的思考过程,可是我们却很难把我们的思考过程严格地描述清楚.我们从小到大,积累了很多的经验和知识,这些经验和知识来自我们的社会实践和学校学习. 我们所处的世界不是完美的,我们本身也不是完美的,人与人的相互交流也不是完美的,我们经常需要反复地沟通,尽管这样,有时候我们还是不能完全理解对方的意思,有可

大屏设计系列之六:有&quot;屏&quot;有据,阿里双11大屏是怎样炼成的

如果您想订阅本博客内容,每天自动发到您的邮箱中,请点这里 [IT168 专稿]本文根据[2016 第七届中国数据库技术大会](微信搜索DTCC2014,关注中国数据库技术大会公众号)现场演讲嘉宾染熙老师分享内容整理而成.录音整理及文字编辑[email protected]田晓旭@老鱼. 染熙,阿里云前端可视化工程师,负责DataV组件的架构.DataV可视化工具产品,以及数据产品的研发和2015年双十一的前端开发.专注于pc端web数据可视化的架构,探索数据可视化自动测试.新型的数据可视化等领域

技术创业,全民创业潮,草根创业者的福利,寻移动互联网创业者,我们创业起步走

蒲公英(移动互联网)国际青年创业驿站是国内第一家基于移动互联技术支持的创业驿站,由蒲公英国际青年驿站与博看文思科技双星锻造.蒲公英驿站是国际连锁机构,在最新的国际创新驿站排名中位列第5位:博看文思科技具有近十年移动互联网经验,是3G跨平台智能移动研发.教育的行业领导者. 蒲公英(移动互联网)国际青年创业驿站只接收移动互联网企业入驻,入驻企业将享受多方位的移动互联网技术支持. 十月优惠:1工位=900/月  4工位=3200/月(价格包含:网络.办公耗材.会议室.水.电.暖.物业等全部费用) 特色

KinectFusion解析

??三维重建是指获取真实物体的三维外观形貌,并建立可复用模型的一种技术.它是当下计算机视觉的一个研究热点,主要有三方面的用途:1)相比于二维图像,可以获取更全面的几何信息:2)在VR/AR中,建立真实和虚拟之间的纽带:3)辅助机器人更好的感知世界.传统的三维重建方法主要是SfM(Structure from Motion),通过一系列不同位置采集的图像,离线计算出三维模型.帝国理工和微软研究院在2011年提出的KinectFusion开启了用RGBD相机实时三维重建的序幕.本文主要参考Kinec

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

一:main.py # -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/3 22:58 from flask import Flask, render_template, request, redirect, session, url_for app = Flask(__name__) app.debug = True # 自动重启 USERS = { 1: {'name': '大白', 'age': '18', 'ge

上采样和PixelShuffle(转)

有些地方还没看懂, mark一下 文章来源: https://blog.csdn.net/g11d111/article/details/82855946 去年曾经使用过FCN(全卷积神经网络)及其派生Unet,再加上在爱奇艺的时候做过一些超分辨率重建的内容,其中用到了毕业于帝国理工的华人博士Shi Wenzhe(在Twitter任职)发表的PixelShuffle<Real-Time Single Image and Video Super-Resolution Using an Effici