hiho 1268 九宫 搜索 模拟
来源:互联网 发布:多目标优化 百度百科 编辑:程序博客网 时间:2024/06/06 15:39
题目
题目链接:http://hihocoder.com/problemset/problem/1268
题目来源:hiho上的比赛
简要题意:给定
3×3 矩阵,一些空缺,问是否能构成唯一幻方。
题解
题意比较明白,然后问题比较基础。
幻方的定义就是横纵,对角线和都相等,由于和为
45 所以每条都是15 。一共
9 个格子,然后每个格子去放入剩下的数字。枚举的次数是
9! 每次就是去做和然后判断。枚举的过程可以利用dfs回溯来做,代码量较长,适合练手。
为了给某同学看做了注释。
代码
#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>#include <stack>#include <queue>#include <string>#include <vector>#include <set>#include <map>#define fi first#define se secondusing namespace std;typedef long long LL;typedef pair<int,int> PII;// head// 给定的数组int a[3][3];// 临时使用的数组int temp[3][3];// 数字访问的情况bool vis[10];// 可以放入数字的位置vector<PII> b;// b每个位置上放的数int path[10];// 输出的结果int res[10];// 存在解bool ok = false;// 有多个解bool many = false;bool judge() { // 把当前的数放到临时的数组里 for (int i = 0; i < b.size(); i++) { temp[b[i].fi][b[i].se] = path[i]; } // 判断横和纵的和是否为15 for (int i = 0; i < 3; i++) { int sumc = 0, sumr = 0; for (int j = 0; j < 3; j++) { sumc += temp[i][j]; sumr += temp[j][i]; } if (sumr != 15 || sumc != 15) return false; } // 判断对角线是否为15 int sum1 = 0, sum2 = 0; for (int i = 0; i < 3; i++) { sum1 += temp[i][i]; sum2 += temp[2-i][i]; } return sum1 == 15 && sum2 == 15;}void dfs(int pos) { // 全部放完了开始检查 if (pos == b.size()) { bool ans = judge(); // 不合法就结束 if (!ans) return; // 合法根据ok的情况去进行更新 if (ok) { many = true; } else { ok = true; memcpy(res, path, sizeof res); } return; } for (int i = 1; i <= 9 && !many; i++) { // 用过的数字不用 if (vis[i]) continue; // 更新放的数还有数使用的情况 path[pos] = i; vis[i] = true; dfs(pos+1); // 结束,进行下次 vis[i] = false; }}int main() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { scanf("%d", a[i]+j); // 为0就是可以放数字的,否则就更新使用情况 if (!a[i][j]) { b.push_back(make_pair(i, j)); } else { vis[a[i][j]] = true; } } } memcpy(temp, a, sizeof temp); dfs(0); // 根据情况输出 if (many) { puts("Too Many"); } else if (ok) { for (int i = 0; i < b.size(); i++) { a[b[i].fi][b[i].se] = res[i]; } for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%d%c", a[i][j], j==2 ? '\n' : ' '); } } } return 0;}
0 0
- hiho 1268 九宫 搜索 模拟
- (原创题)九宫格 (搜索+模拟)
- 手机的九宫格图案解锁总共能绘出多少种图案?(hiho模拟面试题2 - google在线技术笔试模拟)
- Hiho 1385 模拟,细节
- hiho之搜索 24点
- hiho一下 第135周 九宫 (枚举幻方)
- HIHO #1312 : 搜索三·启发式搜索
- #1268 : 九宫
- jquery模拟九宫格抽检
- 计蒜客蓝桥杯模拟赛 九宫格
- hiho 1228 Mission Impossible 6(模拟)
- hiho练习“Drinking Game"二分搜索
- hiho 98 搜索一 24点
- HIHO #1304 : 搜索一·24点
- HIHO #1308 : 搜索二·骑士问题
- hiho字体大小设置(二分搜索)
- 模拟抽奖的九宫格动画效果
- 用js+css 模拟九宫格精灵
- 【leetcode】【122】Best Time to Buy and Sell Stock II
- Android关于Activity
- PASSION之Assembly Language(1)
- arduno添加新的avr开发板
- SpringMVC 使用JSR-303进行校验 @Valid
- hiho 1268 九宫 搜索 模拟
- 用Maven构建Hadoop项目(讲的不太详细,有助于理解)
- linux下kill命令小结
- [LeetCode]235. Lowest Common Ancestor of a Binary Search Tree
- 王易见:后电商时代,家电制造业上升还是沉沦?
- jquery在项目中使用积累
- PASSION之安装mysql常见问题
- DOOR SHELL FSR FTR FVR FVM FRR ISUZU 1996
- jQuery v1.11.0的checkbox