题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1430 , 一道比较好的题。 这道题要用到很多知识,康托展开、BFS、打表的预处理还要用到一一映射,做完受益匪浅。 其实这道题也可以用双向BFS来写,思路也已经有了,过几天再来写。 本文持续更新...
分类:
其他好文 时间:
2015-03-18 00:54:48
阅读次数:
243
问题描述
如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。
我们把第一个图的局面记为:12345678.
把第二个图的局面记为:123.46758
显然是按从上到下,从左到右的顺序记录数字,空格记为句点。
本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。
输入格式
输入第一行包含九宫的初态,第二行包含九宫的终态。
输...
分类:
编程语言 时间:
2015-02-15 15:12:04
阅读次数:
299
Problem Description
The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it. It is constructed with 15 sliding tiles, each with a number from 1 to 15 on it, and all packed into a 4 by 4 frame with one tile m...
分类:
编程语言 时间:
2015-02-15 09:29:04
阅读次数:
1023
康托展开:给定一个排列(由n个数排列而成),我们可以计算出该排列在由n个数组成的所有排列中排名第几(按字典序),这就是康托展开。比如由4个数1,2,3,4组成排列那么2413在所有的排列中排第几呢?首先计算第一位数字比2小的排列有多少种,即 1 * fac[3],怎么得来的呢?首先比2小的数字只有1...
分类:
其他好文 时间:
2015-02-01 23:14:38
阅读次数:
272
康托展开 康托展开的公式是 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,ai为当前未出现的元素中是排在第几个(从0开始)。 这个公式可能看着让人头大,最好举个例子来说明一下。例如,有一个数组 s = ["A", "B", "C.....
分类:
其他好文 时间:
2015-02-01 14:44:49
阅读次数:
213
UVA 11525
(一种通过康托展开求排列的方法)
Problem
给定一个1-K的排列的康托展开形式,即S1*(K-1)! + S2*(K-2)! + S3*(K-3)!
+......+ SK(K-K)!;输出排列。
Limits
Time Limit(ms); 3000
Memory Limit(MB): No Limit
K: [1, 50000]
Si:...
分类:
其他好文 时间:
2015-01-15 16:09:18
阅读次数:
281
以前写康托展开都是直接O(n^2),碰到了一定要nlogn的,存个代码。#pragma warning(disable:4996)#include #include #include #include #include #include #include using namespace std;#d...
分类:
其他好文 时间:
2015-01-12 20:51:54
阅读次数:
195
对于全排列问题,比如说 对于一个集合{a,b,c,d,e,f,g},所有可能的排列方式是{a,b,c,d,e,f,g},{a,b,c,d,e,g,f},{a,b,c,d,f,e,g},....,{g,f,e,d,c,b,a}好吧,如果现在要写一个哈希映射关系表来实现对于每一种排列可能的映射,那么少不...
分类:
其他好文 时间:
2015-01-11 19:01:25
阅读次数:
287
/*
问题描述:
目标状态为:
1 2 3
4 5 6
7 8 0
输入初始状态,求初始状态到最终状态的路径分别
用u(向上),d(向下),l(向左),r(向右)来表示四个方向的移动;
如果有解,则输出路径,否则输出"unsolvable"
有多个输入
*/
#include
#include
#include
#include
using namespace std;
long long f...
分类:
其他好文 时间:
2015-01-09 17:22:51
阅读次数:
311
康托展开的公式 把一个整数X展开成如下形式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]*1!+a[1]*0! 其中,a为整数,并且0=2;i--) { k=S>>3*(i-1); S-=k<<3*(i-1); hash[k...
分类:
其他好文 时间:
2014-12-24 19:57:09
阅读次数:
173