博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1184(聪明的打字员)
阅读量:5247 次
发布时间:2019-06-14

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

View Code
#include
#include
#include
#include
#include
#include
using namespace std;struct node{ int w,deep,pos,flag;};int pow(int a,int b){ if(b==0)return 1; if(b%2==1)return a*pow(a*a,b/2); else return pow(a*a,b/2);}int min0;bool b[1000001][7][2]={ false};int flag[4]={ 1,6,0,0};int move[4]={ 0,0,1,-1};int swap(int u,int pos1,int pos2){ int temp=u,p1,p2; int t1=pow(10,6-pos1); int t2=pow(10,6-pos2); p1=(u/t1)%10; p2=(u/t2)%10; return temp+(t2-t1)*p1+(t1-t2)*p2;}int getDict(int s,int t,int pos,int flag){ if(s==t)return 0; int sum,mx,mi,t6; t6=sum=0; mx=mi=pos; for(int i=6;i>=1;i--) { int t0=abs(s%10-t%10); s/=10; t/=10; if(t0) { sum+=t0; if(i==6){t6=1;continue;} if(i>mx)mx=i; if(i
q1; node in; in.w=s; in.deep=0; in.pos=1; in.flag=0; q1.push(in); b[s][1][0]=true; min0=min(min0,getDict(s,t,1,0)); while(!q1.empty()) { node out=q1.front(); q1.pop(); if(out.deep>=min0)return ; for(int i=0;i<4;i++) { int w=out.w; int pos=out.pos; in.flag=out.flag; if(flag[i]!=0) { w=swap(w,pos,flag[i]); if(flag[i]==6)in.flag=1; } in.pos=pos+move[i]; if(in.pos<1||in.pos>6)continue; if(b[w][in.pos][in.flag])continue; b[w][in.pos][in.flag]=true; in.deep=out.deep+1; min0=min(min0,getDict(w,t,pos,in.flag)+in.deep); in.w=w; q1.push(in); } }}int main(){ int s,t; scanf("%d%d",&s,&t); min0=0x7ffffff; if(s==t){printf("0\n");return 0;} bfs(s,t); printf("%d\n",min0); return 0;}

 

转载于:https://www.cnblogs.com/huangriq/archive/2012/04/14/2447073.html

你可能感兴趣的文章
Kruskal基础最小生成树
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
图论-次短路求法
查看>>
What's New for Visual C# 6.0
查看>>
ExtJs学习笔记之ComboBox组件
查看>>
关于收费软件
查看>>
getopt_long
查看>>
TensorFlow MNIST CNN 代码
查看>>
javascript之Style物
查看>>
JSON跨域解决方案收集
查看>>
图的深度优先遍历
查看>>
C# 之 提高WebService性能大数据量网络传输处理
查看>>
[bzoj1004] [HNOI2008] Cards
查看>>
原生HttpClient详细使用示例
查看>>
几道面试题
查看>>
Factory Design Pattern
查看>>
python中贪婪与非贪婪
查看>>
guava API整理
查看>>
无锁编程笔记
查看>>