hdu 1584 蜘蛛牌(bfs+set)
蜘蛛牌
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3716 Accepted Submission(s): 1586
每组数据有一行,10个输入数据,数据的范围是[1,10],分别表示A到10,我们保证每组数据都是合法的。
Statistic | Submit | Discuss | Note
起初队友一直说是贪心。。于是我也用贪心水了一发
果然Wa..
于是就用万能的搜索了。
搜索难点就在于怎么去重。也就是判断某种序列已经使用过了。
我用的是set容器。里面放string检测。把1~10十个数字当作字符来存。
在使用bfs之前,我们要明确一个问题。
纸牌的放置规则:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动
根据这个规则,我们就可以知道对于某一个位置上的所有牌,我们只要存贮它的最上面的一张牌和最下面的一张牌即可。
当需要移动某个位置a,b牌时:
- a->b:判断a.top-b.bottom是否为1,如果为1,证明可以移动,移动后更新b.bottom=a.top
#include <stdio.h>
#include <string.h>
#include <queue>
#include <set>
#include <iostream>
using namespace std;
char str[15];
struct node
{char str[15];char top[15];char bottom[15];int cost;int count; friend bool operator<(node a,node b){return a.cost>b.cost;}
};
int bfs()
{priority_queue<node>s;set<string>ss;ss.clear();node node1,node2;node1.cost=node1.count=0;strcpy(node1.str,str);strcpy(node1.top,str);strcpy(node1.bottom,str);s.push(node1);while(!s.empty()){node2=node1=s.top();s.pop();if(node1.count==9) return node1.cost;if(ss.find(node1.str)!=ss.end()) continue;ss.insert(node1.str);for(int r=1;r<10;r++){for(int i=0;i<10;i++){if(node1.str[i]=='-'||node1.str[i+r]=='-') continue;if(node1.bottom[i]-node1.top[i+r]==1||node1.top[i]-node1.bottom[i+r]==-1){node1.cost+=r;node1.count++;if(node1.top[i]-node1.bottom[i+r]==-1) {node1.bottom[i+r]=node1.bottom[i];node1.str[i]='-';} else{node1.bottom[i]=node1.bottom[i+r];node1.str[i+r]='-';}if(ss.find(node1.str)==ss.end())s.push(node1);node1=node2;}}}}
}
int main()
{int t;
// freopen("in.txt","r",stdin);scanf("%d",&t);while(t--){for(int i=0;i<10;i++){int a;scanf("%d",&a);str[i]=a+'0';}str[10]='\0';printf("%d\n",bfs());}return 0;
}
hdu 1584 蜘蛛牌(bfs+set)相关推荐
- hdu 1584蜘蛛牌(DFS)
蜘蛛牌 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU - 1584 蜘蛛牌
蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有 ...
- HDU 1584 蜘蛛牌(DFS)
蜘蛛牌 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU—1584 蜘蛛牌 (深搜)
蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有 ...
- HDU - 1584 蜘蛛牌 【DFS】
Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起 ...
- HDU - 1584 蜘蛛牌(dfs+最优性剪枝)
题目链接:点击查看 题目大意:给出10张牌,随机分布在1~10十个不同的位置,要求模拟蜘蛛纸牌的游戏规则,问移动的最短距离之和是多少 题目分析:我们可以直接dfs搜索,但需要想清楚该怎么搜索,这个题目 ...
- (step4.3.9)hdu 1584(蜘蛛牌——DFS)
题目大意:本体是中文题,可以直接在OJ上看 /** 1584_2.cpp** Created on: 2013年8月22日* Author: Administrator*/#include <i ...
- 蜘蛛牌 HDU - 1584(搜索——达到先让某些段先结合,达最优解)
题意: 一排杂乱的牌,牌间距为1,每次移动只能将小的牌,移动到较大牌上,最终使得牌从小到大排好在一堆.问移动的最小距离. 题目: 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样 ...
- HDU1584 蜘蛛牌 DFS回溯
点击打开链接 蜘蛛牌 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
最新文章
- 从“IBM刀片服务器广告告别电视”说起
- Android之自定义AlertDialog的实现方法(一)
- Node.Js从零开始搭建数据管理后台 (一)
- getOutputStream() has already been called for this response异常的原因和解决方法
- 用户sa登陆失败 SQLServer 错误18456的解决方法
- SAP Spartacus 在未登录状态下浏览器 local storage 里存储的数据
- AutoFac+MVC+WebApi源码----我踩过的坑
- 会走索引吗 oracle_茅台酒会走兰花的老路吗?
- excel删除行 uipath_工作再忙,也要学会这10个最经典的Excel小技巧
- Swift3.0语法1
- 【语音去噪】基于matlab谱减法去噪【含Matlab源码 429期】
- 将excel表数据顺序与linux,Excel中表格数据进行颠倒顺序的设置方法
- 五大电子邮件的营销方法,教你提高客户的回头率!
- 通灵学院|游戏设计研习2:人类的外在人群特征★(1300字)
- 分享一个超好用的批量处理PPT与PPTX转换,批量删除某一页PPT,批量DOC转换为DOCX的应用
- java计算机毕业设计前后端分离健身房管理系统源代码+数据库+系统+lw文档
- 避坑指南:Kafka集群快速扩容的方案总结
- 家电售后APP软件开发作用特点
- 微信H5页面源码如何看
- Efficient Methods for Natural Language Processing: A Survey自然语言处理有效方法综述
热门文章
- 不喜欢的工作,可能通往一个崭新世界
- 真的能从脑电信号识别出我的情绪吗?
- 机械制图与计算机绘图第6章答案冯秋宫,cadcam教学图册要点.doc
- 中文字幕!吴恩达 ChatGPT 最新课程
- [Unity学习笔记:FPS游戏制作(2)] 发射子弹————(2021.6.20学习笔记)
- elasticsearch聚合--桶(Buckets)和指标(Metrics)的概念
- VS C# WinForm程序覆盖安装配置
- list-style-position
- Flash 这些知识点你知道多少?
- linux+唤醒windows,Linux系统与Windows系统下的网络唤醒