博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Aizu0121 Seven Puzzle(bfs+康托展开)
阅读量:5337 次
发布时间:2019-06-15

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

比八数码要水的多,bfs。

但是做的时候我把康托展开记错了,wa了好几次。

附上康托展开博客详解:

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #define IO ios::sync_with_stdio(false);cin.tie(0); 9 #define INF 0x3f3f3f3f 10 typedef long long ll; 11 using namespace std; 12 int vis[1000010], b[10]; 13 int dir[4][2] = { 1, 0, -1, 0, 0, 1, 0, -1}; 14 int f[10] = { 1, 1, 2, 6, 24, 120, 720, 5040}; 15 typedef struct{ 16 int a[2][4]; 17 int step; 18 }Node; 19 Node node; 20 int kantor(int a[][4])//求法记错了!! 21 { 22 int k=0, sum=0, t; 23 for(int i = 0; i < 2; i++){ 24 for(int j = 0;j < 4; j++){ 25 b[k++] = a[i][j]; 26 } 27 } 28 for(int i = 0; i < 8; i++){ 29 t = 0; 30 for(int j = i+1; j < 8; j++){ 31 if(b[i]>b[j]) 32 t++; 33 } 34 sum += t*f[8-i-1]; 35 } 36 return sum; 37 } 38 int panduan(int a[][4]) 39 { 40 int k = 0; 41 for(int i = 0; i < 2; i++){ 42 for(int j = 0; j < 4; j++){ 43 if(a[i][j] != k++){ 44 return 0; 45 } 46 } 47 } 48 return 1; 49 } 50 void bfs() 51 { 52 int x, y; 53 queue
q; 54 node.step = 0; 55 q.push(node); 56 int tmp = kantor(node.a); 57 vis[tmp] = 1; 58 while(!q.empty()){ 59 Node t = q.front(), p; 60 if(panduan(t.a)){ 61 cout << t.step << endl; 62 break; 63 } 64 65 for(int i = 0; i < 2; i++){ 66 for(int j = 0; j < 4; j++){ 67 if(t.a[i][j] == 0){ 68 x = i; y = j; //0的位置 69 break; 70 } 71 } 72 } 73 p = t; 74 for(int i = 0; i < 4; i++){ 75 int tx = x+dir[i][0]; 76 int ty = y+dir[i][1]; 77 if(tx>=0&&tx<2&&ty>=0&&ty<4){ 78 swap(p.a[tx][ty], p.a[x][y]); 79 tmp = kantor(p.a); 80 if(!vis[tmp]){ 81 vis[tmp] = 1; 82 p.step++; 83 q.push(p); 84 p.step--; 85 } 86 swap(p.a[tx][ty], p.a[x][y]); 87 } 88 } 89 q.pop(); 90 } 91 } 92 int main() 93 { 94 while(cin >> node.a[0][0]){ 95 memset(vis, 0, sizeof(vis)); 96 for(int i = 1; i < 4; i++){ 97 cin >> node.a[0][i]; 98 } 99 for(int i = 0; i < 4; i++){100 cin >> node.a[1][i];101 }102 bfs();103 }104 return 0;105 }

 

转载于:https://www.cnblogs.com/Surprisezang/p/8997279.html

你可能感兴趣的文章
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>
较快的maven的settings.xml文件
查看>>
Git之初体验 持续更新
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
Maven之setting.xml配置文件详解
查看>>
SDK目录结构
查看>>
malloc() & free()
查看>>
HDU 2063 过山车
查看>>
高精度1--加法
查看>>
String比较
查看>>
Django之Models
查看>>
CSS 透明度级别 及 背景透明
查看>>
Linux 的 date 日期的使用
查看>>
PHP zip压缩文件及解压
查看>>
SOAP web service用AFNetWorking实现请求
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>