VIjos 晴天小猪历险记之Number (搜索+链表hash)

晴天小猪面临挑战,需帮助九位编号的勇士形成一个3x3阵型,使得每行、每列、每条对角线数字和为15。问题转化为找到最小交换次数达成目标阵型。输入输出格式给出,包括多组测试数据,需计算每组数据的最少交换次数,若无解则输出-1。
摘要由CSDN通过智能技术生成
背景

话说上一回,晴天小猪不畏千难万险、千辛万苦、千磨万难……终于爬上了那座深山,来到了那位隐者的小屋中,但它不知道,有一个问题正等待着它……
晴天小猪一推开门,就发现那里……空无一人?但在屋中央有一个石桌,上面有一些字(强吧),最大的几个:如要见我,先过了这道关再说!
晴天小猪定睛一看,终于发现桌上密密麻麻布满了字,费了九天二猪之力,终于将题目看完,大意是:为了维护世界的和平……我们需要让九位勇士组成一个3*3的阵型去屠龙,但是这个阵型的要求很奇特,要九个人按照强弱依次编号1~9,且阵型中每行、每列、每条长对角线上的数字和都为15,这样才能使龙对勇士和阵型收到的损害最小,但九位勇士光是争夺名次就开始翻脸,各位**(任君想象)忙得不可开交,但晴天小猪也急得不可开交(-_-|||),只好向你求助。

描述

现在假设九位勇士已编好了号(感觉好像有人盯着我……)并站好了位置,例如:
7 8 9
1 2 3
4 5 6
每一次交换都可以将相邻的两位勇士(也就是编号……)交换位置,例如:
7 9 8
1 2 3 (8与9交换)
4 5 6

7 8 9
4 2 3 (4与1交换)
1 5 6
但不能
7 8 9
5 2 3 (1与5交换)
4 1 6
求最少的交换次数,使得九位勇士能在最短的时间内(当然是他们争完后……)以最安全的阵型去屠龙。

P.S:由于不能预测未来,各位设想了许多的阵型(-_-||),所以给了你10组阵型(测试点),每组50个……

格式

输入格式

输入数据一共3*50行,每个数据中用3*3的9个不同的1~9的数字表示初始状态。

(样例就只给几个阵型了^_^)

输出格式

每行一个数,即对应的初始阵型到所需阵型所需最少的交换次数,如果无解,输出-1。

样例1

样例输入1

7 8 9
1 2 3
4 5 6
6 1 8
7 5 3
2 9 4
1 2 8
3 5 4
6 7 9
Copy

样例输出1

8
0
5
Copy

限制

各个测试点5s

提示

欲知后事如何,请做出此题^_^。

来源

Sunnypig

 

  1 /*
  2     链表hash
  3     应该都能懂 
  4     我们的目标序列有八个
  5     把这个矩阵按顺序展开之后
  6     其实就是一个1-9的全排列
  7     直接将八个目标状态丢进队列中
  8     让他扩展完将所有情况的最小距离的找出来
  9     只要手写一个数组模拟链表hash就好了
 10 */
 11 #include<queue>
 12 #include<cstdio>
 13 #include<iostream>
 14 #define MAXN 100010
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值