HDU 1430+BFS
来源:互联网 发布:剑灵捏脸数据灵男数据 编辑:程序博客网 时间:2024/06/01 10:09
这道题一看,暴力bfs去搞,超时,康拓hash下还是超时,结果看大牛博客,才知道。。对于一个状态到另一个状态都可以转化为12345678到另一个状态,中间只需置换下即可,这样的话,只要一次bfs预处理出所有情况就可以了。。不需要每个case都搜一遍。。。
#include<cstdio>#include<queue>#include<map>#include<string>#include<algorithm>#include<iostream>using namespace std;struct node{string str;string step;int va;};string s,t;int vi[50000];string dp[50000];int pos[10];int func[10];int hash(string &s){int va=0;for(int i=0;i<7;i++){int cnt=0;for(int j=i+1;j<8;j++)if(s[j]<s[i])cnt++;va+=cnt*func[7-i];}return va;}void gao1(string &s){for(int i=0;i<4;i++)swap(s[i],s[i+4]);}void gao2(string &s){char t=s[3];for(int i=2;i>=0;i--)s[i+1]=s[i];s[0]=t;t=s[7];for(int i=6;i>=4;i--)s[i+1]=s[i];s[4]=t;}void gao3(string &s){char tp=s[1];s[1]=s[5];s[5]=s[6];s[6]=s[2];s[2]=tp;}void bfs(){memset(vi,0,sizeof(vi));queue<node>q;node ss,tt;ss.str=s;ss.step="";ss.va=hash(s);q.push(ss);vi[ss.va]=1;dp[ss.va]="";while(!q.empty()){ss=q.front();q.pop();string t=ss.str;int k;gao1(t);k=hash(t);if(!vi[k]){tt.str=t;vi[k]=1;tt.step=ss.step+'A';tt.va=k;dp[k]=tt.step;q.push(tt);}t=ss.str;gao2(t);k=hash(t);if(!vi[k]){tt.str=t;vi[k]=1;tt.step=ss.step+'B';tt.va=k;dp[k]=tt.step;q.push(tt);}t=ss.str;gao3(t);k=hash(t);if(!vi[k]){tt.str=t;vi[k]=1;tt.step=ss.step+'C';tt.va=k;dp[k]=tt.step;q.push(tt);}}}int main(){func[0]=1;for(int i=1;i<=9;i++)func[i]=func[i-1]*i;s="12345678";bfs();while(cin>>s>>t){swap(s[4],s[7]);swap(s[5],s[6]);swap(t[4],t[7]);swap(t[5],t[6]);for(int i=0;i<8;i++)pos[s[i]-'0']=i+1;for(int i=0;i<8;i++)t[i]=pos[t[i]-'0'];/*置换*/int k=hash(t);cout<<dp[k]<<endl;}return 0;}
- HDU 1430+BFS
- HDU 1430 魔板 (BFS)
- HDU bfs
- hdu 1430 魔板 (预处理+置换+bfs)
- HDU 1430 魔板(BFS+HASH+置换)
- HDU - 1430 魔板 (bfs预处理 + 康托)
- hdu 1175 bfs
- HDU 1072(BFS)
- HDU 1429(BFS )
- hdu 1026(BFS)
- HDU 4039 BFS
- hdu 1312 bfs
- hdu 1253 三维bfs
- hdu 1242 bfs
- BFS hdu 1072 Nightmare
- HDU 1072 Nightmare BFS
- bfs hdu 1026
- hdu-2757 BFS
- 新C++标准:C++0x教程(一):导论
- 假如我来架构12306网站
- 开始
- Android中AppWidget的分析与应用:AppWidgetProvider
- 英语练习120 Wait and see
- HDU 1430+BFS
- nginx 配制.htaccess伪静态
- asp.net 三层架构图文详解
- 数字签名
- Android 下载文件 DownloadManager
- js验证表单
- 网络编程五种IO模型的形象比喻(老陈收信)
- 新C++标准:C++0x教程(二):面向所有开发者的特性(上)
- 计算机的书