钻石独立棋的用HASH表和栈改进版
虽然只是小程序,呵呵,顺便多学点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表和栈改进版相关推荐
- SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...
- Times33算法与最快的Hash表
关于times33算法 不约而同的,几乎所有的流行的hash map都采用了DJB hash function,俗称"Times33"算法.Perl.Berkeley DB .Ap ...
- [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表
[源码解析] NVIDIA HugeCTR,GPU版本参数服务器- (5) 嵌入式hash表 文章目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表 ...
- 从头到尾彻底解析Hash表算法
从头到尾彻底解析Hash表算法 发布时间: 2013-10-02 10:26 阅读: 25156 次 推荐: 14 原文链接 [收藏] 作者:July.wuliming.pkuoliv ...
- 0x14.基础数据结构 — hash表与字符串hash
目录 一.Hash表 1.AcWing 137. 雪花雪花雪花 0.hash表+链表 1.字符串的最小表示法 二.字符串hashhashhash 0.AcWing 138. 兔子与兔子 1.luogu ...
- 一步一步写算法(之hash表)
[ 声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] hash表,有时候也被称为散列表.个人觉得,hash表是介于链表和二叉树之间的一种中间结构.链 ...
- 转 从头到尾彻底解析Hash表算法
出处:http://blog.csdn.net/v_JULY_v. 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部 ...
- C++实现Hash表
C++实现Hash表的插入,删除,重建开放寻址法 #include<iostream> using namespace std; typedef int KeyType; / ...
- hash表建立 很久没写数据结构了
/** auhtor:lx date 4.9 2011 brief hash table */ #include <stdio.h> #include <stdlib.h> # ...
最新文章
- SqlHelper全攻略
- 【转】感知哈希算法——找出相似的图片
- nyoj 715 Adjacent Bit Counts
- 【Flutter】Dart 数据类型 字符串类型 ( 字符串定义 | 字符串拼接 | 字符串 API 调用 )
- pointPolygonTest函数
- Android如何实现TCP和UDP传输
- matlab求迟滞,MATLAB PI迟滞模型问题
- PHP个人博客网站设计 学生PHP个人博客网页源码 PHP MYSQL动态网站作品
- 解决Windows 7删除执行过的 EXE、Bat文件有延迟的问题
- 09.QT应用程序启动外部exe文件
- 201621123053《Java程序设计》第十一周学习笔记文章
- Go语言实现文本文件拷贝
- jdk线程的同步问题
- 常见问题:为什么我的插件安装失败?
- unity 获取屏幕角坐标_Unity3D世界坐标与屏幕坐标
- word打印高清图片
- php字符串去掉指定字符串,php怎么去除指定字符串
- 微信android登录协议分析,手机微信协议分析,请教··
- grpc加TLS加密和令牌认证
- 2019 年 Q1 全球云基础设施市场份额揭晓,AWS继续领跑市场;Mesos官方回应Twitter“抛弃”Mesos……...