[BZOJ 1054][HAOI 2008]移动玩具(BFS+判重)
来源:互联网 发布:怎么设置淘宝主款 编辑:程序博客网 时间:2024/04/29 20:50
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1054
真是水题,感谢HAOI送的福利样例23333
裸BFS,用string做判重,会八数码就会这题。
注意由于队列中状态数很多,一定要把队列的数组开大点!!!
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <string>#include <algorithm>#include <map>#define MAXN 5using namespace std;map<string,bool>visit;int tmp[MAXN][MAXN],nowstatus[MAXN][MAXN];int xx[]={1,-1,0,0},yy[]={0,0,1,-1};bool inMap(int x,int y){ if(x<1||x>4||y<1||y>4) return false; return true;}string GetPermutationFromArray(){ string ans=""; for(int i=1;i<=4;i++) for(int j=1;j<=4;j++) ans+=tmp[i][j]+'0'; return ans;}void GetArrayFromPermutaion(string s){ int p=0; for(int i=1;i<=4;i++) for(int j=1;j<=4;j++) tmp[i][j]=s[p++]-'0';}struct node{ string status; int step;}q[100000],first,goal;int h=0,t=0;int BFS(){ q[t++]=first; visit[first.status]=true; while(h<t) { node now=q[h++]; if(now.status==goal.status) return now.step; GetArrayFromPermutaion(now.status); for(int x=1;x<=4;x++) for(int y=1;y<=4;y++) { if(tmp[x][y]==1) //(x,y)是玩具 { for(int dir=0;dir<4;dir++) { int tx=x+xx[dir],ty=y+yy[dir]; if(!inMap(tx,ty)) continue; if(tmp[tx][ty]==0) //(tx,ty)是空地 { node next; next.step=now.step+1; swap(tmp[x][y],tmp[tx][ty]); next.status=GetPermutationFromArray(); if(!visit[next.status]) { visit[next.status]=true; q[t++]=next; } swap(tmp[x][y],tmp[tx][ty]); } } } } } return -1;}int main(){ string s; first.step=0; for(int i=1;i<=4;i++) { cin>>s; first.status+=s; } for(int i=1;i<=4;i++) { cin>>s; goal.status+=s; } printf("%d\n",BFS()); return 0;}
0 0
- [BZOJ 1054][HAOI 2008]移动玩具(BFS+判重)
- [BZOJ 1054][HAOI 2008]移动玩具 状态压缩
- bzoj 1054: [HAOI2008]移动玩具 (bfs)
- 【BZOJ 1054】 [HAOI2008]移动玩具 bfs
- [BZOJ]1054: [HAOI2008]移动玩具BFS
- BZOJ 1054: [HAOI2008]移动玩具 BFS, Hash
- BZOJ 1054 移动玩具 BFS+二进制状态压缩
- 【BZOJ】1054 移动玩具
- bzoj 1054 移动玩具
- 【BZOJ 1055】【HAOI 2008】玩具取名 【区间DP】
- 【BZOJ 1055】【HAOI 2008】玩具取名【区间动规】
- Bzoj 1054 [HAOI2008]移动玩具
- BZOJ 1054 [HAOI2008]移动玩具
- BZOJ 1054 [HAOI2008]移动玩具
- BZOJ1054[HAOI]移动玩具|状态压缩SPFA
- bzoj 1054 HAOI2008 移动玩具 暴力
- bzoj 1054: [HAOI2008]移动玩具.cpp
- [BZOJ1054]HAOI2008移动玩具|bfs
- Haskell 的范畴
- 201412022200-hd-Largest prime factor
- HDOJ 题目2209 翻纸牌游戏(dfs)
- unity3D抽象类
- HDU1024 Max Sum Plus Plus 最大子段和(动态规划)
- [BZOJ 1054][HAOI 2008]移动玩具(BFS+判重)
- 命令行界面: odoo.py(Odoo启动参数)
- BZOJ 1797 AHOI 2009 Mincut 最小割 最小割
- 今天报专业了!!
- mina源码分析---IoEvent和IoFilterEvent类及其联系和区别
- java基础_内部类
- 重装windows后修复grub2引导
- Uva 10192&10066-(DP)
- Android之使用AlertDialog.Builder类创建带列表的对话框和带自己所布局视图的对话框