该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#define null NULL

#define enter putchar(10)

#define space putchar(32)

#define rg(i, a, b, s) for(auto i = a; (b > a)?(i < b):(i > b); i += s)

#define INF USHRT_MAX

#define END LONG_LONG_MIN

#define var_name(x) #x

#define print_container(c) printf("Elements in container %s: \n", var_name(c)); for(auto x: c) {cout << to_string(x) << endl;}

using namespace std;

typedef long long ll;

typedef unsigned short int usi;

typedef unsigned int ui;

inline string to_string(string _s){

return(_s);

}

template

string to_string(pair p){

string _r = "

_r += to_string(p.first);

_r += ", ";

_r += to_string(p.second);

_r += ">";

return(_r);

}

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

usi sum = 0;

usi Matrix[9][9] = {0};

size_t _Hash(const pair &p){

return(2 * pow(p.first, 2) + 3 * pow(p.second, 3));

}

/*初始化时的点坐标集合*/

unordered_set, decltype(&_Hash)> s(0, _Hash);

/*后续填入的点坐标集合*/

unordered_set, decltype(&_Hash)> has_filled(0, _Hash);

ll num_of_solutions = 0;

inline void insert_pair(usi a, usi b){

s.insert(make_pair(a, b));

}

void Initiation(){

Matrix[5][2] = Matrix[0][8] = 1;

insert_pair(5, 2);

insert_pair(0, 8);

Matrix[0][5] = Matrix[4][1] = Matrix[1][8] = 2;

insert_pair(0, 5);

insert_pair(4, 1);

insert_pair(1, 8);

Matrix[6][0] = 3;

insert_pair(6, 0);

Matrix[2][6] = Matrix[5][5] = 4;

insert_pair(2, 6);

insert_pair(5, 5);

Matrix[8][1] = Matrix[7][6] = 5;

insert_pair(8, 1);

insert_pair(7, 6);

Matrix[3][0] = Matrix[1][4] = Matrix[6][1] = 6;

insert_pair(3, 0);

insert_pair(1, 4);

insert_pair(6, 1);

Matrix[7][2] = Matrix[8][5] = Matrix[5][3] = 7;

insert_pair(7, 2);

insert_pair(8, 5);

insert_pair(5, 3);

Matrix[3][4] = Matrix[8][8] = 8;

insert_pair(3, 4);

insert_pair(8, 8);

Matrix[0][1] = Matrix[8][0] = 9;

insert_pair(0, 1);

insert_pair(8, 0);

}

inline void print_matrix(){

rg(i, 0, 9, 1){

rg(j, 0, 9, 1){

if(s.find(make_pair(i, j)) != s.end()){

SetConsoleTextAttribute(handle, FOREGROUND_RED);

}else{

SetConsoleTextAttribute(handle, FOREGROUND_GREEN);

}

printf("%hu", Matrix[i][j]);

if(j < 8){

space;

}

}

enter;

}

SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);

}

/*获取a行b列位置的度,返回的是这个位置“附近”的数字集合,度就是该集合的size,显然在这个位置填入的数字不能在此集合中*/

inline unordered_set get_cnt(usi a, usi b){

unordered_set _s;

rg(i, a / 3 * 3, (a + 3) / 3 * 3, 1){

rg(j, b / 3 * 3, (b + 3) / 3 * 3, 1){

if(Matrix[i][j] != 0){

_s.insert(Matrix[i][j]);

}

}

}

rg(i, 0, 9, 1){

if(Matrix[a][i] != 0){

_s.insert(Matrix[a][i]);

}

if(Matrix[i][b] != 0){

_s.insert(Matrix[i][b]);

}

}

return(_s);

}

void do_fill(){

if(sum == 81 - s.size()){

printf("第%lld组解:\n", ++num_of_solutions);

print_matrix();

system("pause");

return;

}

/*index表示接下来找到的度最大(或之一)的位置坐标*/

pair index;

unordered_set t;

usi max_cnt = 0;

rg(i, 0, 9, 1){

rg(j, 0, 9, 1){

if(has_filled.find(make_pair(i, j)) != has_filled.end() || s.find(make_pair(i, j)) != s.end()){

continue;

}

unordered_set _t = get_cnt(i, j);

if(_t.size() > max_cnt){

max_cnt = _t.size();

index.first = i;

index.second = j;

t = _t;

}

}

}

//printf("row: %hu, column: %hu\n", index.first, index.second);

//print_container(t);

rg(i, 0, 9, 1){

/*剪枝:在集合t中的数或者与此位置同行同列,或者在同一3*3区域内,不在此集合中的数可被选填*/

if(t.find(i + 1) == t.end()){

Matrix[index.first][index.second] = i + 1;

sum++;

has_filled.insert(index);

do_fill();

/*加上break就没有回溯搜索,只使用贪心策略求出一组解*/

//break;

Matrix[index.first][index.second] = 0;

sum--;

has_filled.erase(index);

}

}

}

int main(){

Initiation();

//print_container(s);

do_fill();

return 0;

}

啊哈C语言答案,啊哈c语言开头的题,哪位大佬来试试?相关推荐

  1. c语言答案知码,C语言笔试习题集答案和解析.doc

    C语言笔试习题集答案和解析 C语言基础知识 一,选择题 1 答案是A A正确 B {}可以作为复合语句的标志 C main 函数不是用户命名的 D 分号是语句结束的标志,肯定是语句的一部分 做这个题目 ...

  2. 知到山东理工c语言答案,山东理工大学C语言实验.doc

    山东理工大学C语言实验 山东理工大学 C语言实验指导[答案] 实验一? 顺序结构程序设计(2学时) //姓名:*** //班级:*** //学号:*** //参考测试数据:输入:0 0 180 输出: ...

  3. 山西农业大学c语言答案,第一章C语言及程序设计概述-东北农业大学教务处.doc...

    全国高等农林院校"十一五"规划教材 C语言程序设计 孙力 主编 中国农业出版社 内容简介 本书是全国高等农林院校"十一五"规划教材之一. 全书共11章,分别介绍 ...

  4. 2019上海理工大学c语言答案,上海理工大学C语言实验7答案.doc

    上海理工大学C语言实验7答案.doc (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 7.9 积分 实验7 字符数组和字符串参考答案[DIY]1. ...

  5. 兰大网络教育c语言答案,兰大《C语言程序设计》9月在线考核试题答案

    [2-i]);0 d8 v% r$ e7 X) f# N; ]: x A.1 5 90 o( c" r/ I3 p( E( c" o) h$ b) n B.1 4 71 m5 }. ...

  6. 湖南科技学院C语言答案,湖南科技大学C语言期末考试习题库.doc

    湖南科技大学C语言期末考试习题库 志伟分享 左凯小编 PAGE \* MERGEFORMAT3 选择题(共 题),成绩() 1.C语言所提供的基本数据类型包括字符型.整型.双精度型.单精度型和____ ...

  7. 石油大c语言答案,中国石油大学C语言上机题答案(2013版)答案 最全最详细

    由2012级学霸学长期末复习整理,包含所有2012级c语言上机题题目级及答案.比网上的2012版更新!!! 中国石油大学c语言上机题答案大全(2013版) 最全最详细 1.1 Hello world. ...

  8. 尔雅c语言答案,数据结构(C语言版)_尔雅_章节满分答案

    数据结构(C语言版)_尔雅_章节满分答案 更多相关问题 根据下面内容,回答下列各题: 某组织拟按GB/T19001标准建立质量管理体系并申请认证.在进行质量管 求插入纯水的氢电极与标准氢电极所组成的原 ...

  9. c语言答案填空选择,C语言试题配答案

    第I卷 选择题(共50分) 一.选择题(共25题,每题2分,共50分) 1. 以下正确的C语言常量是( ) A.0789 B.2e2.4 C.'abd' D.'\t' 2. 下列变量定义中合法的是(  ...

  10. 石油大c语言答案,中国石油大学C语言答案

    int main() { char a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}}; fun(w,a); ...

最新文章

  1. 青源Forum | 人工智能的数理基础前沿系列报告 · 第 3 期
  2. netty源码分析之一:server的启动
  3. 万维网发布服务 w3svc 已停止 除非万维_万维网和互联网的区别
  4. Python 3实现k-邻近算法以及 iris 数据集分类应用
  5. 请谈下Android消息机制,复习指南
  6. puppet php,puppet入门实践
  7. 基于GitHub创建自己的个人网站
  8. 快速搭建一个Express工程骨架
  9. HDU 6034 - Balala Power! | 2017 Multi-University Training Contest 1
  10. asp.net mvc 压缩html代码,浅谈ASP.NET中MVC 4 的JS/CSS打包压缩功能
  11. iOS category解析
  12. sir节点matlab模型,SIR模型实现(matlab)
  13. 过程工业中的smartLink HART-IP
  14. PS-给文字填充图片纹理
  15. 国产芯片传来好消息,纯国产CPU测试数据“曝光”
  16. 汉诺塔问题解法心路历程及C语言学习请教
  17. 普通人的2022春招总结(阿里、腾讯offer)
  18. MATLAB 矩阵处理及多项式计算
  19. 罗振宇2022“时间的朋友”跨年演讲全文稿(pdf)
  20. ad 卡尔曼_理解卡尔曼五个方程

热门文章

  1. Win10下安装Intel Visual Fortran2019具体步骤及初始调试过程。
  2. 微信开发之JSSDK权限配置,服务器端获取签名等参数(java实现)
  3. Flash MX本地保存数据的三种方法
  4. html网页设计期末大作业——绿色的化妆品网页设计(5页) 网页设计作业模板 学生网页制作源代码下载
  5. AJAX框架都有哪些是常用的
  6. 使用eclipse开发可视化界面windowsbuilder
  7. 清除计算机用户缓存,如何在Windows 7中清除内存缓存,释放电脑空间?
  8. 冲击波病毒简介及解决方法
  9. APP设计~切图那些事儿
  10. Android Verified Boot