八中OJ——1849 八数码 的错误代码
来源:互联网 发布:淘宝联盟禁止自推自买 编辑:程序博客网 时间:2024/05/01 07:48
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#define maxn 1000000//质数using namespace std; typedef int state[9];//每种情况 的状态state st[maxn],aim;//list <int> v[maxnlen];int dist[maxn];int dx[4]={-1,1,0,0};int dy[4]={0,0,-1,1};int contor[]={0,1, 2, 6, 24, 120,720, 5040, 40320};bool find_case[maxn];bool Contor(state& s);int bfs(); int main(){ int i; for(i=0;i<9;i++) scanf("%d",&st[1][i]); for(i=0;i<9;i++) scanf("%d",&aim[i]); int ans=bfs(); if(ans>0) printf("%d",ans); else printf("-1\n"); return 0;}/*bool hash(state& s){ int x=0,i; for(i=0;i<9;i++) x= x*10+s[i]; for(list <int> :: iterator p=v[x%maxnlen].begin(); p != v[x%maxnlen].end();p++) if(*p == x) return false; v[x%maxn].push_back(x); return true;}*/bool Contor(state& s){ int x=0,i; for(i=8;i>=0;i--) x += s[i]*contor[i]; if(find_case[x]==1) return 0; else { find_case[x]=1; return 1; }}int bfs(){ int f=1,r=2; while(f<r) { int z,d,x,y; state& s=st[f]; if(!memcmp(aim,s,sizeof(s)))//判断 return dist[f]; for(z=0;z<9;z++) if(s[z]==0) break; x=z/3;y=z%3; for(d=0;d<4;d++)//移动 { int nx,ny,nz;//移动后的坐标 nx=x+dx[d]; ny=y+dy[d]; nz=nx*3+ny; if((nx>0&&nx<3)&&(ny>=0&&ny<3))//OK { state& t=st[r]; memcpy(&t,&s,sizeof(s)); t[nz]=s[z];//复制 t[z]=s[nz]; dist[r]=dist[f]+1; if(Contor(st[r])) r++; } } f++; } return 0;}
0 0
- 八中OJ——1849 八数码 的错误代码
- 八数码的八境界
- 八数码的八境界
- 八数码的八境界
- 八数码的八境界
- 八数码的八境界
- 八数码的八境界
- 八数码的八境界
- 八数码的八境界
- 八数码的八境界
- 八数码的八境界
- 八数码的八境界
- 八数码的八境界
- 【八中】7数码
- 简单的BFS处理——八数码问题
- 菜鸟系列——八数码八境界
- 八数码问题——A*搜索
- 八数码——解题报告
- POJ 1127 计算几何+并查集
- startActivityForResult的初步学习
- 只考加法的面试题
- Ignatius and the Princess
- 算法竞赛入门经典3-1分数统计
- 八中OJ——1849 八数码 的错误代码
- 黑马程序员—基础回顾集合体系总结(短篇)
- 皇冠3D成型與最流行使用的材料
- logistic回归简介
- 底层因为接受到操作系统信号而停止的解决
- hibernate-懒加载
- linux驱动编程--中断
- libstagefright openmax编解码数据流向分析
- __bridge,__bridge_transfer和__bridge_retained详解