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

最新文章

  1. UEFI模式下Win10和Linux双系统
  2. Java实现MySQL数据库导入
  3. laravel5 使用model 表名总是多个s
  4. Markdown常用用法
  5. hdu Remainder
  6. [ACM_模拟] ACM - Draw Something Cheat [n个长12的大写字母串,找出交集,按字母序输出]
  7. linux下导入、导出mysql数据库命令 下载文件到本地
  8. DB天气app冲刺二阶段第十一天(完结)
  9. Dynamics CRM2013 停用默认公共视图
  10. [Deep Learning] 神经网络基础
  11. L1-Day11
  12. 将Long类型字节大小数据转换成标准的视频大小格式
  13. tar --exclude排除指定目录打包
  14. python 知识2
  15. router.go,router.push,router.replace的区别
  16. TCP/UDP协议、理解三次握手四次挥手、Socket
  17. python正则表达式1
  18. 配置Oracle E-Business Suite Integrated SOA Gateway Release 12.1.2/12.1.3
  19. HDU 5889 Barricade(最短路+最小割)
  20. 进程控制块(PCB)

热门文章

  1. 必须知道的.net——学习笔记1
  2. solr
  3. Maven编译项目报错:某些类找不到符号
  4. HDU 5071 Chat(2014鞍山赛区现场赛B题)
  5. 几个简单实用的css效果
  6. 使用update!导致的更新时候的错误信息不显示 ruby on rails
  7. C,C++经典笔试题(答案)转自:http://blog.163.com/jianhuali0118@126/blog/static/377499702008230104125229/
  8. IOS系统ipa软件包在线安装
  9. 11.2---字符串数组排序,删除变位词(CC150)
  10. kill新号专题