poj 1166 The Clocks 记录路径的广搜
来源:互联网 发布:中日二战实力对比 知乎 编辑:程序博客网 时间:2024/05/17 04:00
题意:
给9个时钟的初始状态,和一些对某几个钟的操作,求最少经过几步能到目标状态(全指向12点)。
分析:
明显的广搜,但实现起来的细节要注意:1.因为要记录路径,所以要在整个程序执行过程中扩展出的节点在输出路径前不能销毁, 故采用静态内存分配的方法(开node[600000],用get_node()创建节点。2.queue<node>比queue<int>要多花1别的时间。
//poj 1166//sep9#include <iostream>#include <queue>using namespace std;char move[10][8]={"ABDE","ABC","BCEF","ADG","BDEFH","CFI","DEGH","GHI","EFHI"};int vis[1000000],idx;int ans[10000];struct NODE{int state,pre,move_used,idx;}node[600000];queue<int> q;NODE get_node(int sta,int pre,int moves){node[idx].state=sta;node[idx].pre=pre;node[idx].move_used=moves;node[idx].idx=idx;return node[idx++];}int main(){int a[10],b[10],ini_state=0;idx=0;memset(vis,0,sizeof(vis));while(!q.empty()) q.pop();for(int i=0;i<9;++i)scanf("%d",&a[i]);for(int i=8;i>=0;--i)ini_state=ini_state*4+a[i];NODE p=get_node(ini_state,-1,0);vis[p.state]=1;q.push(p.idx);int target_idx;while(!q.empty()){int x=q.front();q.pop();if(node[x].state==0){ target_idx=node[x].idx; break;}int tmp=node[x].state;for(int i=0;i<9;++i){a[i]=tmp%4;tmp/=4;}for(int i=0;i<9;++i){for(int j=0;j<9;++j)b[j]=a[j];for(int j=0;move[i][j]!='\0';++j)b[move[i][j]-'A']=(a[move[i][j]-'A']+1)%4;int ns=0;for(int j=8;j>=0;--j)ns=ns*4+b[j];if(vis[ns]==0){NODE np=get_node(ns,node[x].idx,i+1);q.push(np.idx);vis[ns]=1;}}}int x=0;while(target_idx!=0){ans[x++]=node[target_idx].move_used;target_idx=node[target_idx].pre;}for(int i=x-1;i>=0;--i)printf("%d ",ans[i]);return 0;}
0 0
- poj 1166 The Clocks 记录路径的广搜
- USACO The Clocks 所谓的广搜?
- POJ 1166 The clocks
- POJ 1166 The Clocks
- POJ 1166 The Clocks
- POJ 1166 The Clocks
- poj 1166 The Clocks
- POJ 1166 The Clocks
- poj 1166 The Clocks
- poj 1166 The Clocks
- poj 1166 The Clocks
- poj The Clocks 1166
- POJ 1166 The Clocks
- POJ 1166:The Clocks
- POJ 1166 The Clocks
- POJ The Clocks 1166
- POJ 3414 Pots 记录路径的广搜
- POJ 1166 The Clocks 笔记
- 指针实现通讯录
- java基础-2-面向对象(2)-封装与单例程序设计思想
- Java基础 异常-finally 包package
- 黑马程序员_java语言_常见对象的概述
- 经典的拆分字符串的语句
- poj 1166 The Clocks 记录路径的广搜
- 用DebugView调试C#程序
- poj 1659 Frogs' Neighborhood
- php模版引擎(smarty3)—display()渲染文本字符串
- Android使用WebView从相册/拍照中添加图片
- 队列出队三个
- 最小堆的删除
- unity手游开发--如何得到当前物体播放的动画
- Fragment not attached to Activity