八数码问题判断是否有解
来源:互联网 发布:csgo cpu 优化 编辑:程序博客网 时间:2024/06/04 18:38
这道题搜索不会写= =。结果这个是个著名的八数码问题,有一个定理能够判断是否有解:将整个矩阵从上到下从左到右变成一个序列,把0去掉后求出该序列的逆序对
所以就当是复习归并排序求逆序对吧。又写错了的说= =
参考代码
#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <string>#include <stack>#include <queue>#include <deque>#include <map>#include <set>using std::cin;using std::cout;using std::endl;inline int readIn(){ int a; scanf("%d", &a); return a;}const int maxn = 10005;const char* szAns[] ={ "You still have a chance.", "You are destined to be single."};int n;int sequeue[maxn];int temp[maxn];int pair;void mergeSort(int l = 0, int r = n){ if (r - l == 1) return; int mid = (l + r) / 2; mergeSort(l, mid); mergeSort(mid, r); int i = l; int j = mid; int k = l; while (i < mid || j < r) { if (j >= r || i < mid && sequeue[i] <= sequeue[j]) { temp[k++] = sequeue[i++]; } else { temp[k++] = sequeue[j++]; pair += mid - i; } } for (int i = l; i < r; i++) { sequeue[i] = temp[i]; }}void run(){ int a = readIn(); while (a--) { n = readIn(); int to = n * n; int cnt = 0; pair = 0; for (int i = 1; i <= to; i++) { sequeue[cnt] = readIn(); if (sequeue[cnt]) cnt++; } mergeSort(0, cnt); printf("%s\n", szAns[pair & 1]); }}int main(){ run(); return 0;}
突然看到了牛人的总结,记录一个。
阅读全文
0 0
- 八数码问题判断是否有解
- 判断N数码问题是否有解
- HDU_3600_八数码之类的问题是否有解
- POJ 1077 Eight(八数码第八境界|IDA*+曼哈顿距离+判断是否有解)
- 八数码的几种做法的总结以及是否有解的判断
- 八数码问题完全版-是否可解判断及求解
- 八数码有解
- a*八数码(有问题)
- hdu 3600 Simple Puzzle 判断N 数码是否有解
- hdu(4021)八数码的解是否存在问题
- sgu139Help Needed!判断15数码是否有解,以及判断N数码是否有解的推论
- 八数码问题有解的条件及其推广
- 八数码问题有解的条件及其推广
- 八数码问题有解的条件及其推广
- 判断N 数码是否有解 牛人总结 归并排序
- ZJU2004 Commedia dell'arte - 八数码问题有解的条件及其推广
- 八数码问题有解条件&推广N×N,N×N×N
- 由八数码问题引入。对BFS有更深考虑
- vuex学习实践笔记
- 最佳日志实践(v2.0)
- Codeforces Round #218 (Div. 2) B. Fox Dividing Cheese(思维 数学)
- 数据去重复
- FreeRTOS代码剖析之4:内存管理Heap_4.c
- 八数码问题判断是否有解
- *RK
- java中equals方法的用法以及==的用法(转)
- 跟着官网学UE4(提取干货) Blueprint 3rd Person Game 1-5
- 【面经笔记】堆排序与topk问题
- 浙大PAT甲级-1030
- 【Glance】glance学习
- js字符串批量替换(java中字符串有replaceAll()方法,但是js没有)
- typedef和#define的用法与区别