UVA10085宽搜之八宫格走最远
来源:互联网 发布:银行大数据客户画像 编辑:程序博客网 时间:2024/06/07 16:56
刚开始以为直接宽搜会超时,并不会,直接宽搜,打印路径的话,开个数组记录子节点的父节点,再开一个数组
记录父节点到子节点的方向,然后递归就行了。
#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<string>#include<set>#include<map>#include<iostream>#include<algorithm>using namespace std;const int maxn=1e6;int t;set<int> s;int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};int st[maxn][10];int fa[maxn],path[maxn];int ans;char ss[5]="UDLR";bool insert(int *cup){ int sum=0; for(int i=0;i<9;i++){ sum=sum*10+cup[i]; } if(s.count(sum)) return 0; s.insert(sum); return 1;}void bfs(){ int front=0,rear=1; while(front<rear){ int zx,zy; for(int i=0;i<9;i++){ if(!st[front][i]){ zx=i/3,zy =i%3; break; } } for(int i=0;i<4;i++){ int tx,ty; tx=zx+dx[i]; ty=zy+dy[i]; if(tx>=0&&tx<3&&ty>=0&&ty<3){ memcpy(st[rear],st[front],sizeof(st[front])); st[rear][zx*3+zy]=st[front][tx*3+ty]; st[rear][tx*3+ty]=st[front][zx*3+zy]; if(insert(st[rear])){ fa[rear]=front; path[rear]=i; rear++; } } } front++; } ans=rear-1;}void print(int cur){ if(cur!=0){ print(fa[cur]); printf("%c",ss[path[cur]]); }}int main(){ cin>>t; int k=0; while(t--){ for(int i=0;i<9;i++) cin>>st[0][i]; s.clear(); insert(st[0]); bfs(); cout<<"Puzzle #"<<++k<<endl; for(int i=0;i<3;i++) cout<<st[ans][0+i*3]<<' '<<st[ans][1+i*3]<<' '<<st[ans][2+i*3]<<endl; print(ans); cout<<endl<<endl; }}
0 0
- UVA10085宽搜之八宫格走最远
- UVA10085
- uva10085
- uva10085
- UVa10422和UVa10085
- UVa10085 - The most distant state
- uva10085 - The most distant state
- UVa10085 - The most distant state
- 【刷题之路】二叉树上最远距离
- 最远距离
- 最远距离
- 最远距离
- 最远距离
- 最远距离
- [隐式图搜索]The most distant state UVA10085
- uva10085(The Most Distant State)-隐式图搜索
- uva10085 The most distant state(BFS)
- poj 2187 Beauty Contest (旋转卡壳之平面最远点对)
- js实现简单的选项卡功能
- 探讨12306两地三中心混合云架构
- ACboy needs your help (HDU_1712) 分组背包
- slf4j源码解析
- Java中的守护线程和用户线程
- UVA10085宽搜之八宫格走最远
- 蓝桥杯往届试题——核桃的数量(求最小公倍数)
- USACO 6.5.5 Checker Challenge 位运算+dfs
- linux 0号进程和1号进程的区别
- 最大子数组问题
- MLE与MAP
- Linux硬件信息查看工具
- CSS 清除浮动的三种方式
- BZOJ 1176: [Balkan2007]Mokia&&2683: 简单题|cdq分治