电子商务网站建设哪好,高清crm软件价格欧美,如何建设机关用房管理系统网站,爱南宁app下载题干#xff1a;
小Hi最近在教邻居家的小朋友小学奥数#xff0c;而最近正好讲述到了三阶幻方这个部分#xff0c;三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中#xff0c;使得每一行、每一列和每一条对角线的和都是相同的。
三阶幻方又被称作九宫格#xff0c;在…题干
小Hi最近在教邻居家的小朋友小学奥数而最近正好讲述到了三阶幻方这个部分三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中使得每一行、每一列和每一条对角线的和都是相同的。
三阶幻方又被称作九宫格在小学奥数里有一句非常有名的口诀“二四为肩六八为足左三右七戴九履一五居其中”通过这样的一句口诀就能够非常完美的构造出一个九宫格来。 有意思的是所有的三阶幻方都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。现在小Hi准备将一个三阶幻方不一定是上图中的那个中的一些数组抹掉交给邻居家的小朋友来进行还原并且希望她能够判断出究竟是不是只有一组解。
而你呢也被小Hi交付了同样的任务但是不同的是你需要写一个程序~
Input
输入仅包含单组测试数据。
每组测试数据为一个3*3的矩阵其中为0的部分表示被小Hi抹去的部分。
对于100%的数据满足给出的矩阵至少能还原出一组可行的三阶幻方。
Output
如果仅能还原出一组可行的三阶幻方则将其输出否则输出“Too Many”不包含引号。
Sample Input
0 7 2
0 5 0
0 3 0
Sample Output
6 7 2
1 5 9
8 3 4
解题报告 简化版的数独。POJ2676 - 数独 这题要注意两个地方ok函数中注释掉的那一部分如果用那一部分也可以ac。第二就是如果用了这个第一部分记住a数组一定要开15开14就炸了。。。因为你是从1开始的啊不然就会越界了、
AC代码
#includeiostream
#includecstring
#includecstdio
using namespace std;
int maze[4][4];
bool book[10];
int cpy[4][4];
int a[100];
int cnt;
bool ok();
void dfs(int x,int y);
void aprint();
int main()
{int tmp;for(int i1;i3;i){for(int j1;j3;j){scanf(%d,tmp);maze[i][j]tmp;book[tmp]true;}}dfs(1,1);if(cnt1) {aprint();}else {printf(Too Many);}return 0 ;
}
void dfs(int x,int y){
// printf();if(x4y1){if(ok()){cnt;for(int i1;i3;i){for(int j1;j3;j){cpy[i][j]maze[i][j];}}}return;}if(maze[x][y]0){for(int i1;i10;i){if(!book[i]){book[i]1;maze[x][y]i;if(y3){dfs(x1,1);}else{dfs(x,y1);}maze[x][y]0;book[i]0;}}}else{if(y3){dfs(x1,1);}else{dfs(x,y1);}}
}
bool ok(){int a[15]{0};int flag1;a[1]maze[1][1]maze[1][2]maze[1][3];a[2]maze[2][1]maze[2][2]maze[2][3];a[3]maze[3][1]maze[3][2]maze[3][3];a[4]maze[1][1]maze[2][1]maze[3][1];a[5]maze[1][2]maze[2][2]maze[3][2];a[6]maze[1][3]maze[2][3]maze[3][3];a[7]maze[1][1]maze[2][2]maze[3][3];a[8]maze[3][1]maze[2][2]maze[1][3];for(int i1;i8;i){if(a[i]!15) flag0;}return flag;
// int r1maze[1][1]maze[1][2]maze[1][3];
// int r2maze[2][1]maze[2][2]maze[2][3];
// int r3maze[3][1]maze[3][2]maze[3][3];
// int c1maze[1][1]maze[2][1]maze[3][1];
// int c2maze[1][2]maze[2][2]maze[3][2];
// int c3maze[1][3]maze[2][3]maze[3][3];
// int dui1maze[1][1]maze[2][2]maze[3][3];
// int dui2maze[3][1]maze[2][2]maze[1][3];
// a[r1];a[r2];a[r3];a[c1];a[c2];a[c3];a[dui1];a[dui2];
// if(a[15]8) {
// return true;
// }
// else return false;
}
void aprint(){for(int i1;i3;i){for(int j1;j3;j){printf(%d,cpy[i][j]);if(j3){cout endl;}else{printf( );}}}
}