hdu 6171 ida*
来源:互联网 发布:c语言为什么叫c语言 编辑:程序博客网 时间:2024/05/20 09:08
题意:一个数塔,类似八数码的样子。。
思路:正解双向搜索。。时间复杂度非常科学。。不过数据弱ida*搞了过去。。。。(大力出奇迹?)
代码;
#include<bits/stdc++.h>using namespace std;#define X first#define Y second#define PB push_back#define MP make_pair#define MEM(x,y) memset(x,y,sizeof(x));#define bug(x) cout<<"bug"<<x<<endl;typedef long long ll;typedef pair<ll,ll> pii;using namespace std;pii B;int tim=0;vector<vector<int> > s;int diff(){ int ret=0; for(int i=0;i<s.size();i++){ for(int j=0;j<s[i].size();j++){ if(s[i][j]!=0) ret+=abs(s[i][j]-i); } } return ret;}int ok;void ida(int x,int y,int cnt){ if(ok!=-1) return; if(cnt+diff()>tim) return; if(diff()==0){ ok=cnt; return; } if(x-1>=0&&y-1>=0){ swap(s[x][y],s[x-1][y-1]); ida(x-1,y-1,cnt+1); swap(s[x][y],s[x-1][y-1]); } if(x-1>=0&&y<=x-1){ swap(s[x][y],s[x-1][y]); ida(x-1,y,cnt+1); swap(s[x][y],s[x-1][y]); } if(x+1<6&&y+1<=x+1){ swap(s[x][y],s[x+1][y+1]); ida(x+1,y+1,cnt+1); swap(s[x][y],s[x+1][y+1]); } if(x+1<6){ swap(s[x][y],s[x+1][y]); ida(x+1,y,cnt+1); swap(s[x][y],s[x+1][y]); }}int main() { int t; for(int i=1;i<=6;i++) s.PB(vector<int>(i)); scanf("%d",&t); while(t--){ int x,y; for(int i=1;i<=6;i++){ for(int j=0;j<i;j++){ scanf("%d",&s[i-1][j]); if(s[i-1][j]==0){ x=i-1;y=j; } } } ok=-1; tim=diff(); int cnt=0; while(1){ ida(x,y,0); tim++; if(tim>20) break; if(ok!=-1) break; } if(ok!=-1)printf("%d\n",ok); else puts("too difficult"); } return 0;}
阅读全文
0 0
- hdu 6171 ida*
- hdu 1685 Booksort (IDA*)
- hdu 1667 IDA*
- hdu 2234 IDA*
- hdu 1560 IDA*
- hdu 1813 IDA*
- hdu 2918 IDA*
- hdu 3459 IDA*
- 【IDA*】hdu 1560
- hdu 1667(IDA*)
- hdu 2234(IDA*)
- hdu 1560(IDA*)
- hdu 1813(IDA*)
- hdu 2918(IDA*)
- HDU-1685-Booksort(IDA*)
- hdu 1685 IDA*
- HDU 1560 IDA*搜索
- hdu 2234+1560 IDA*
- mysql java开发注意事项
- hdu 6053
- 有关小波的几个术语及常见的小波基介绍
- Linux--线程与进程的总结
- HDU 6165 FFF at Valentine(tarjan缩点+拓扑排序)
- hdu 6171 ida*
- mysql @value -= 用法
- C++之MFC系统图标任务托盘显示
- 【04】淘淘商城-Service层递归拼装ItemCatResult详解
- 字符串模式匹配
- Android开发初级00_1如何在安卓开发之发送广播
- 双色球选号及确认中几等奖
- Codeforces 788B Weird journey (欧拉回路 组合数计数)
- hdu 6098