博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
九宫重排
阅读量:4965 次
发布时间:2019-06-12

本文共 1775 字,大约阅读时间需要 5 分钟。

描写叙述

如以下第一个图的九宫格中,放着 1~8 的数字卡片,另一个格子空着。与空格子相邻的格子中的卡片能够移动到空格中。经过若干次移动。能够形成第二个图所看到的的局面。  我们把第一个图的局面记为:12345678.  把第二个图的局面记为:123.46758  显然是按从上到下。从左到右的顺序记录数字,空格记为句点。  本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动能够到达。假设不管多少步都无法到达,则输出-1。

 

输入

 输入第一行包括九宫的初态,第二行包括九宫的终态。

输出

 输出最少的步数,假设不存在方案,则输出-1。

例子输入

12345678.
123.46758

例子输出

3
#include 
#include
#include
#include
using namespace std;char str1[20];///终态int jc[10] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};///1到10的阶乘int dir[] = {0, 1, 0, -1, 0};///方向bool f[1000000];struct node { char str[10];//当然状态 int step;//步数 int loc;//空格位置};int fun(char str[])//状态匹配{ for (int i = 0; i < 9; i++) { if (str[i] != str1[i])return false; } return true;}int por(string a)//康托展开{ int size = 0; for (int i = 0; i < 9; i++) { int len = 0; for (int j = i + 1; j < 9; j++) { if (a[i] > a[j])len++; } size += len * jc[8 - i]; } return size;}int bfs(node x){ queue
q; q.push(x); while (!q.empty()) { node a = q.front();q.pop(); for (int i = 0; i < 4; i++) {//四个方向 // cout<
<
= 3 || ay < 0 || ay >= 3)continue; b.str[b.loc] = b.str[ax * 3 + ay];//位置交换 b.str[ax * 3 + ay] = '9'; b.loc = ax * 3 + ay; b.step ++; int index = por(b.str); if (!f[index]) { if (fun(b.str)) { return b.step; } f[index] = true; q.push(b); } } } return -1;}int main(){ node a; while (cin >> a.str >> str1) { memset(f, 0, sizeof(f)); for (int i = 0; i < 9; i++) { if (a.str[i] == '.') {a.str[i] = 9; a.loc = i; a.step = 0;} if(str1[i]=='.')str1[i]='9'; } cout << bfs(a) << endl; } return 0;}

转载于:https://www.cnblogs.com/mengfanrong/p/5147580.html

你可能感兴趣的文章
避免内存重叠memmove()性能
查看>>
【ASP.NET】从服务器端注册客户端脚本
查看>>
Infix to Postfix Expression
查看>>
SELECT LOCK IN SHARE MODE and FOR UPDATE
查看>>
Perl/Nagios – Can’t locate utils.pm in @INC
查看>>
目录导航「深入浅出ASP.NET Core系列」
查看>>
简易爬虫(爬取本地数据)
查看>>
python 进程间通信
查看>>
深拷贝 vs 浅拷贝 释放多次
查看>>
Javascript 有用参考函数
查看>>
点群的判别(三)
查看>>
GNSS 使用DFT算法 能量损耗仿真
查看>>
【转】Simulink模型架构指导
查看>>
MYSQL数据库的导出的几种方法
查看>>
SQL Server-5种常见的约束
查看>>
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号
查看>>