惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Y
Y Combinator Blog
B
Blog RSS Feed
K
Kaspersky official blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Know Your Adversary
Know Your Adversary
C
CERT Recently Published Vulnerability Notes
V
Vulnerabilities – Threatpost
C
Check Point Blog
L
LINUX DO - 热门话题
Simon Willison's Weblog
Simon Willison's Weblog
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Hacker News
The Hacker News
P
Palo Alto Networks Blog
L
Lohrmann on Cybersecurity
T
Tor Project blog
T
Tenable Blog
H
Help Net Security
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学
Cisco Talos Blog
Cisco Talos Blog
T
Threatpost
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Schneier on Security
G
Google Developers Blog
P
Privacy & Cybersecurity Law Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
Microsoft Azure Blog
Microsoft Azure Blog
Cyberwarzone
Cyberwarzone
Security Latest
Security Latest
AWS News Blog
AWS News Blog
P
Proofpoint News Feed
美团技术团队
博客园 - 三生石上(FineUI控件)
Latest news
Latest news
腾讯CDC
G
GRAHAM CLULEY
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
博客园 - 【当耐特】
C
CXSECURITY Database RSS Feed - CXSecurity.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
Martin Fowler
Martin Fowler

博客园 - 空空色色

转一篇,CentOS后台服务配置 linux kernel 2.6.36 编译升级 linux的UPNP支持(转) UPNP协议细节(转) UPnp协议 from wikipedia 考察智力zz JScollPane以及JPanel相关 bmp文件格式 java中对图象文件的处理(读写以及转换) Java媒体框架(JMF),个人很欣赏.... 常用颜色对照表 YUV/YIQ色彩空间的转换 关于Swing实现透明窗体的。我也很喜欢,收藏! java中的数据库程序应用 A*以及迭代加深的A*算法(IDA*) 我的兄弟们之袋鼠篇 我的兄弟们之温J篇 java中的图象处理技术基础 经典搜索算实现之一,广度优先.
深度优先状态搜索法
空空色色 · 2006-11-04 · via 博客园 - 空空色色

      继续未完成之事业.
      今天我们要讲的是深度优先搜索,还是以8数码问题为背景.
      简单的说,深度优先就是沿着一条路径走到底,对于8数码的问题,由于空格只能上下左右的移动(有时候也不全然),因此每种移动策略,都会产生一个不同于当前的状态.
(0代表空格)
比如对于状态          左移             上移 
1  2  3                                           1  2  3                                            1  0  3
4  0  5                        0  4  5                          4  2  5 
6  7  8                                           6  7  8                                            6  7  8   

      所以简单的说,每个状态的可能子状态有(平均起来)3个,依据深度优先的策略,深度搜索可以简单的表示成一个递归的过程。
depthSearch(node T)
{
    visit(T); 
    for each sonNode son of T, do depthSearch(node son);
}
      涉及到具体的实现,那么我们就要对其中的求子节点细化并用语言描述。比如在8数码的背景下,怎么求子节点呢?前面提到,上下左右的移动会产生子节点,那么自然的可以想到,有某中方式来表示空格移动方向,因为要对所有的子接点逐个的进行深度搜索。
一个简单的方法,用一个整数来替代方向,比如0代表左,1代表下,2代表右,3代表上。所以求子接点的函数描述如下:
Node sonNode( Node t, int i)
{
//在这里添加代码。
}
所以8数码的深度状态搜索算法描述如下:
boolean depthSearch(node T)
{
   if(is(T))return TRUE;
   else  if( visit(T)) //访问并检查是否还有子节点没有被访问。
   { 
      for(int i=0;i<4;i++)
      {
         if(able(sonNode(T,i)))
            depthSearch(sonNode(T,i));
      }
   }
   else return  FLASE;
}
其中boolean able(Node n)是用于确定节点n是否曾经被访问过。
那么说了这么多,我们需要保存已经访问过的节点吗??因为节点的数量相当大,所以如果存,将会耗费大量的空间。这里有一个特殊的方法,可以用hash表的方法来确定节点是否被访问。但是如果需要记录路径的话,最好还是将节点存起来,因为需要记录父节点。具体程序见我的文集.