hdu 1043 eight
来源:互联网 发布:中国推理小说知乎 编辑:程序博客网 时间:2024/05/17 09:24
八数码 逆向dfs打表
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;char ss[100];int c[100];struct data{ int a[10]; int loc; int id; int fa; int di; data(){fa=-1;}}st,que[400000],en;int trans[400000];int has(int a[]){ int sum=0; for(int i=0;i<9;i++) { int num=0; for(int j=i+1;j<9;j++) { if(a[i]>a[j]) num++; } sum+=num*c[9-1-i]; } return sum+1;}int vis[400000];bool ok(int x,int y){ if(x<0||x>=3||y<0||y>=3) return 0; return 1;}int dx[]={0,0,1,-1};int dy[]={1,-1,0,0};char dire[]={'l','r','u','d'};int fa[400000];void show(int now){ // printf("now:%d \n",now); if(now==-1||now==0) { // puts("aaaaaaaaaaa"); return ; } printf("%c",dire[que[now].di]); show(que[now].fa);}void bfs(){ memset(fa,-1,sizeof fa); int fron=0,rear=0; memset(vis,0,sizeof vis); vis[st.id]=1; trans[st.id]=rear; que[rear++]=st; while(fron<rear) { data now=que[fron++]; int nx,ny; nx=now.loc/3; ny=now.loc%3; // printf("nx:%d ny%d\n",nx,ny); for(int i=0;i<4;i++) { int xx; int yy; xx=nx+dx[i]; yy=ny+dy[i]; if(!ok(xx,yy)) continue; data ne=now; ne.loc=xx*3+yy; swap(ne.a[now.loc],ne.a[ne.loc]);// for(int j=0;j<3;j++)// {// for(int k=0;k<3;k++)// {// printf("%d ",ne.a[3*j+k]);// }// puts("");//// }// printf("%d %d\n",ne.a[now.loc],ne.a[ne.loc]); // getchar(); ne.id=has(ne.a); ne.fa=fron-1; ne.di=i; if(!vis[ne.id]) { vis[ne.id]=1; trans[ne.id]=rear; // printf("%d %d\n",ne.id,rear); que[rear++]=ne; } } }}int main(){ c[0]=1; for(int i=1;i<=9;i++) c[i]=c[i-1]*i; for(int i=0;i<9;i++) st.a[i]=i+1; memset(trans,-1,sizeof trans); st.a[8]=0; st.fa=-1; st.loc=8; st.id=has(st.a); //printf("st.id:%d\n",st.id); bfs(); while(scanf("%s",ss)!=EOF) { int x; if(ss[0]=='x') x=0; else x=ss[0]-'0'; en.a[0]=x; for(int i=1;i<9;i++) { scanf("%s",ss); int x; if(ss[0]=='x') x=0; else x=ss[0]-'0'; en.a[i]=x; }//// for(int i=0;i<3;i++)// {//// for(int j=0;j<3;j++)// {//// printf("%d ",en.a[i*3+j]);// }//// puts("");//// } en.id=has(en.a); // printf("en.id:%d\n",en.id); if(!vis[en.id]) { puts("unsolvable"); } else if(en.id!=st.id) { show(trans[en.id]); puts(""); } else { puts("lr"); } } return 0;}
0 0
- hdu 1043 Eight
- HDU 1043 Eight
- 周赛 HDU 1043 Eight
- Hdu 1043 Eight
- HDU 1043 Eight
- HDU 1043 Eight
- HDU 1043 Eight
- HDU 1043 Eight
- hdu 1043 Eight
- HDU 1043 Eight
- hdu 1043 Eight
- HDU 1043 Eight
- HDU 1043 - Eight
- hdu 1043 eight
- HDU 1043 Eight
- hdu 1043 eight a*
- hdu 1043 Eight(A*)
- HDU-1043 Eight(BFS)
- Struts2中注册登录模块配置文件路径更改
- Mac 环境下安装 TensorFlow 使用Virtualenv 安装
- SQL注入--sql server
- Linux系统GCC程序编译,GNU程序调试
- 实现DIV的其他动画效果
- hdu 1043 eight
- 大话数据结构读书笔记 4---树
- ajax-创建XMLHttpRequest对象
- 认识css样式(元素居中)
- Android之Toast
- Spark
- Cannot create __weak reference in file using manual refrence counting.
- 在main方法执行前输出Hello world
- git图示