【luogu1379】八数码难题(bfs)
来源:互联网 发布:手机如何开网店淘宝店 编辑:程序博客网 时间:2024/06/05 18:25
题目:
我是超链接
题解:
8位数判重乱搞+bfs不优化+一些奇妙的操作都在注释里。
见识到了大暴力。
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <queue>using namespace std;struct hh{int n,l,step;};const int jz[9]={100000000,10000000,1000000,100000,10000,1000,100,10,1};const int c[4]={-1,3,-3,1};//一行数中可以被0换到的点 char st[12];bool ss[88888888];int n,i;int main(){scanf("%d",&n);int www=n,l=8;while (www){if (www%10==0) break;l--; www/=10;}//找到0的位置 queue<hh>q;q.push((hh){n,l,0});ss[n/10]=1;//9位数会炸,确定了前八位就可以知道第九位,所以只需8位 while (!q.empty()){hh now=q.front(); q.pop();if (now.n==123804765){printf("%d",now.step);return 0;}for (i=0;i<4;i++){int xx=now.l+c[i];//0的位置变成了? int j=now.l;//原来0的位置 if (xx<0 || xx>8) continue;if (j%3==0 && c[i]==-1) continue;//3*3的格子中已经是最左 if (j%3==2 && c[i]==1) continue;//3*3的格子中已经是最右 //举个例子,283104765 ---> 283014765 int w=(now.n/jz[xx])%10;//2831 ---> 1 //283104765 ---> 28310--->28311 ---> 283114765int www=(now.n/jz[j]+w)*jz[j]+now.n%jz[j];//283114765->2831->283->2830 14765www=www/jz[xx]/10*10*jz[xx]+www%jz[xx];//极为神奇的操作 if (!ss[www/10]){ss[www/10]=1;q.push((hh){www,xx,now.step+1});}}}}
阅读全文
1 0
- 【luogu1379】八数码难题(bfs)
- IDA*——Luogu1379 八数码难题
- 【题目】八数码难题(BFS)
- CODEVS 1225 八数码难题(BFS && A*)
- BFS+康托展开(洛谷1379 八数码难题)
- 【Codevs1225】 八数码难题 BFS (1/1000)
- 八数码(BFS)
- 八数码难题(转)
- 【基础练习】【BFS+A*】codevs1225八数码难题题解
- 八数码难题 (codevs 1225)题解
- 八数码难题源代码
- 【宽搜】八数码难题
- wikioi1225 八数码难题
- wikioi1225 八数码难题
- ## 八数码难题 ##
- Codevs1225 八数码难题
- 八数码难题
- 八数码难题
- Python语法基础11.for循环
- opennmt聊天模型训练
- 异常
- [HDU](4857)逃生 ---拓扑排序(反向)+STL优先级队列(图)
- Android 热更新技术详解
- 【luogu1379】八数码难题(bfs)
- 含有父子关系的上下节点SQL
- DeepLearning学习笔记——极大似然估计
- Brackets sequence UVA
- 牛客网华为在线训练---字符串分隔
- 海量数据处理算法
- 实时处理Kafka发来的日志信息
- Audit注解拦截器,用于自动记录日志
- 【shiro】--- 身份认证