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

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

蓝桥杯的一道题。

我用了全排列的编码优化。

AC代码

#include
#include
const int maxn=400000;const int dx[]={-1,1,0,0};const int dy[]={
0,0,-1,1};typedef int state[9];int goal[9];int res[maxn][9]; //存储访问过的节点 int d[maxn],fact[9];int vis[maxn];void init(){ fact[0]=1; for(int i=1;i<9;++i) fact[i]=i*fact[i-1];}int KT_solve(int row) //编码函数 { int code=0; for(int i=0;i<9;++i) { int cnt=0; for(int j=i+1;j<9;++j) { if(res[row][j]
=0&&newy<3&&newy>=0&&newy<3) { state &t=res[real]; //向状态数组加入新的状态 memcpy(&t,&s,sizeof(s)); t[pos]=s[new_pos]; t[new_pos]=s[pos]; d[real]=d[front]+1; if(KT_solve(real)) real++; } } front++; } return 0;}int main(){ memset(vis,0,sizeof(vis)); d[1]=0; char s[10]; scanf("%s",s); for(int j=0;j<9;++j) { if(s[j]=='.') res[1][j]=0; else res[1][j]=s[j]-'0'; } scanf("%s",s); for(int j=0;j<9;++j) { if(s[j]=='.') goal[j]=0; else goal[j]=s[j]-'0'; } int ans=bfs(); if(ans>0) printf("%d\n",d[ans]); else printf("-1\n"); return 0;}

如有不当之处欢迎指出!

转载于:https://www.cnblogs.com/flyawayl/p/8305585.html

你可能感兴趣的文章
大数据平台搭建-hadoop集群的搭建
查看>>
安装一些包管理的记录 win10
查看>>
Android RecyclerView notifyDataSetChanged不起作用
查看>>
AndroidStudio3.0 Canary 8注解报错Annotation processors must be explicitly declared now.
查看>>
Android 一个改进的okHttp封装库
查看>>
genymotion下载出现Unable to create virtual device,Server returned HTTP status code 0.
查看>>
Android 下拉刷新框架实现
查看>>
ViewPager + Fragment实现滑动标签页
查看>>
Spring与Hibernate实现增删改查两方法
查看>>
Genymotion 插件在 Eclipse 和 Android Studio 中点击后无法初始化 Initialize Engine: failed 解决方法...
查看>>
1R安装环境
查看>>
初学Python——Socket网络编程
查看>>
Linux 如何实现 VLAN - 每天5分钟玩转 OpenStack(12)
查看>>
Gym - 101252H
查看>>
2019年2月15日,复习
查看>>
线性布局Row和Column
查看>>
关键路径(代码讲解)- 数据结构和算法68
查看>>
if语句三种格式
查看>>
CentOS 7 单用户模式修改root密码
查看>>
Linux DHCP原理
查看>>