虽然只是小程序,呵呵,顺便多学点STL吧,就把它由原来的遍历搜索改成用HASHMAP存储改进,时间加快了不少哦,嗯,HASHKEY有二种,一种就用一个LONG LONG来表示,呀,刚好多了二位,不然INT就够了,另一种就用一串STRING来了,这里是用STRING的,这样的搜索模板就更完整了哦:)
/*
CODY BY 我的BLOG AT 2004.10.9
独立钻石棋问题, 深度优先搜索,尽量清除重复点
2004.10.18
利用HASHMAP改进CLOSED集,利用STACK改进OPEN集.

棋盘编号布局如下:
01 02 03
04 05 06
07 08 09 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
31 32 33
*/
#include <iostream>
#include <fstream>
#include <algorithm>
#include <stack>
#include <string>
#include <hash_map>

#include "Node.h"
using namespace std;
using namespace stdext;

stack<Node>open;
hash_map<string,Node> closed;
typedef pair <string, Node> Pair;
hash_map<string,Node>:: const_iterator rcIter;

// 判断next结点是否已扩展过,是返回true,否则false
bool extended(Node &next);
// 搜索解
void search();

int main(void)
{
search();
system("pause");
return 0;
}

void search()
{
// 初始化
Node first;
for(int i=1;i<=33;i++){
first.c[i] = 1;
}
first.c[17] = 0;
first.key = 0;
open.push(first);

// 开始循环
while(!open.empty()){
//cout<<"正在搜索...... 已扩展结点:"<<closed.size()<<"\n";
Node tmp = open.top();
open.pop();

// 看所取节点是否为目标节点
if(tmp.moveid[0] >= 31 && tmp.c[17] == 1){
tmp.output(cout);// 输出解并返回
ofstream out("out.txt");
tmp.output(out);
return ;
}

// 若不是则生成所有的子状态
Node next;
bool hadit;
for(int i = 1;i <= 33 ;i++){
if(tmp.c[i] != 0){
if( tmp.down(i,next)){
if(extended(next) == false){// 还没扩展过
open.push(next);
}
}
if( tmp.up(i,next)){
if(extended(next) == false){// 还没扩展过
open.push(next);
}
}
if( tmp.left(i,next)){
if(extended(next) == false){// 还没扩展过
open.push(next);
}
}
if( tmp.right(i,next)){
if(extended(next) == false){// 还没扩展过
open.push(next);
}
}
}
}
// 将刚才取出的open点放入closed表
closed.insert ( Pair(tmp.getHashKey(),tmp));
}
}

bool extended(Node &next)
{
// 若next在closed中,即已扩展过了,返回true
rcIter = closed.find(next.getHashKey());
if(rcIter == closed.end()){
return false;
}else{
return true;
}
}

钻石独立棋的用HASH表和栈改进版相关推荐

  1. SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...

  2. Times33算法与最快的Hash表

    关于times33算法 不约而同的,几乎所有的流行的hash map都采用了DJB hash function,俗称"Times33"算法.Perl.Berkeley DB .Ap ...

  3. [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表

    [源码解析] NVIDIA HugeCTR,GPU版本参数服务器- (5) 嵌入式hash表 文章目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表 ...

  4. 从头到尾彻底解析Hash表算法

    从头到尾彻底解析Hash表算法 发布时间: 2013-10-02 10:26  阅读: 25156 次  推荐: 14   原文链接   [收藏]   作者:July.wuliming.pkuoliv ...

  5. 0x14.基础数据结构 — hash表与字符串hash

    目录 一.Hash表 1.AcWing 137. 雪花雪花雪花 0.hash表+链表 1.字符串的最小表示法 二.字符串hashhashhash 0.AcWing 138. 兔子与兔子 1.luogu ...

  6. 一步一步写算法(之hash表)

    [ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] hash表,有时候也被称为散列表.个人觉得,hash表是介于链表和二叉树之间的一种中间结构.链 ...

  7. 转 从头到尾彻底解析Hash表算法

    出处:http://blog.csdn.net/v_JULY_v.   说明:本文分为三部分内容,     第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部 ...

  8. C++实现Hash表

    C++实现Hash表的插入,删除,重建开放寻址法 #include<iostream>   using namespace std;      typedef int KeyType; / ...

  9. hash表建立 很久没写数据结构了

    /** auhtor:lx date 4.9 2011 brief hash table */ #include <stdio.h> #include <stdlib.h> # ...

最新文章

  1. SqlHelper全攻略
  2. 【转】感知哈希算法——找出相似的图片
  3. nyoj 715 Adjacent Bit Counts
  4. 【Flutter】Dart 数据类型 字符串类型 ( 字符串定义 | 字符串拼接 | 字符串 API 调用 )
  5. pointPolygonTest函数
  6. Android如何实现TCP和UDP传输
  7. matlab求迟滞,MATLAB PI迟滞模型问题
  8. PHP个人博客网站设计 学生PHP个人博客网页源码 PHP MYSQL动态网站作品
  9. 解决Windows 7删除执行过的 EXE、Bat文件有延迟的问题
  10. 09.QT应用程序启动外部exe文件
  11. 201621123053《Java程序设计》第十一周学习笔记文章
  12. Go语言实现文本文件拷贝
  13. jdk线程的同步问题
  14. 常见问题:为什么我的插件安装失败?
  15. unity 获取屏幕角坐标_Unity3D世界坐标与屏幕坐标
  16. word打印高清图片
  17. php字符串去掉指定字符串,php怎么去除指定字符串
  18. 微信android登录协议分析,手机微信协议分析,请教··
  19. grpc加TLS加密和令牌认证
  20. 2019 年 Q1 全球云基础设施市场份额揭晓,AWS继续领跑市场;Mesos官方回应Twitter“抛弃”Mesos……...

热门文章

  1. html语言可以写微信小程序吗,微信小程序 语句
  2. 科技生活,舒适优雅,21款奔驰GLE350e改ACC、电吸门、通风座椅
  3. 三体运动计算机模拟软件,三体运动模拟软件ThreeBody
  4. UG8.0产品设计视频教程 点逆向 STL图片造型设计教程
  5. 400个超实用的电脑快捷键
  6. 【基础入门详解】程序员的二维码也要玩出不同色彩,用Python生成动态彩色二维码
  7. 注册域名需要资格吗_注册域名的条件是什么 注册域名需要了解哪些
  8. 如何将DWG批量转成高清晰JPG图片
  9. 2021-3-26 米斯特安全团队视频笔记二(含PHP)
  10. Linux 怎么显示开火车动画