冒险家(八数码问题)
这题是翻译了八数码问题(POJ — 2893),然后稍加修改。 Description 小D在地下世界探索时,找到了一座藏有无数奇珍异宝的王国,可是进入王国有一扇门,当且仅当你将门上的矩阵变成国王心中的完美矩阵时,大门方可打开。一向不喜欢数字的小D傻眼了,现求助于你,请你帮助他看他是否能进入王国,获得奇珍异宝。 规则如下: 给定一个M N的矩阵(M和N其中必有一个奇数),矩阵上滑贴的编号为1 – (M N – 1),请你通过移动滑板(滑板在矩阵中用0表示),在不越界的情况下可上下左右移动。请你判断通过变换它是否能变成一个国王心中的顺序矩阵 例:一个3*3的顺序矩阵如下: 1 2 3 4 5 6 7 8 0 Input 多组输入。第一行为两个整数m和n,当m和n同时为0程序结束。(1 <= m,n <= 1000),接下来是一个m*n的矩阵。 Output 输出只有一行,如果小D能进入王国获得奇珍异宝请输出YES,否则输出NO; 每两组输出之间空一行 思路: 参考八数码有解情况,可得出如下结论: 两个矩阵的线性数组的逆序对的奇偶相同时,它们其中一个可以通过相邻元素之间的交换变成另外一个,前提是列数为奇数;若列数不为奇数 则需判断空格位置的竖直距离对2取余与逆序对数目对2取余的情况。 顺序矩阵逆序对为0,是偶数 //由于数据量较大,建议使用快读加快写入数据 愉快AC #include