首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >广度优先搜索Haskell

广度优先搜索Haskell
EN

Stack Overflow用户
提问于 2013-08-07 15:25:16
回答 2查看 1.3K关注 0票数 0

[("1“、"2”、"3")、("2“、"1")、("3”、"1")]

我想写一个广度优先的搜索。

这是我的代码:

代码语言:javascript
复制
search_command graph start ""=(graph,"You didnt enter start vertex!\n")
search_command graph ""  end=(graph,"You didnt enter end vertex!\n")
search_command graph start end=
    if (has_element graph start)&&(has_element graph end) then 
            (graph,unwords (search graph [start] end [] []))
    else if (has_element graph end)==False then 
            (graph,"Element with "++end++" name not found!")
    else 
            (graph,"Element with "++start++" name not found!")


search [] _ _ [] result=result 
search (item:graph) (x:start) end use result=
    if (fst item==x)&&(elem x use)==False then
            search graph (get_connect_vertices graph graph (fst item) []) end (use++[x]) (result++[x])
    else if (fst item==end)&&(fst item==x) then
            search [] [] "" [] (result++[x]++[end])
    else
            search graph [x] end use (result)

但是当我运行它时,我得到了exeption:异常:函数搜索中的非穷举模式。

我的错误是什么?如果给出了我的图,如何实现宽度优先搜索?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-07 15:35:42

正如例外情况所示,您的模式并非详尽无遗。具体来说,您有下面的search模式

代码语言:javascript
复制
search []    _     _ [] _
search (_:_) (_:_) _ _  _

如果第一个参数是零,第四个参数也必须是,如果第一个参数不是零,那么第二个参数也不能是零。下列情况未包括在内:

代码语言:javascript
复制
search [] _ _ (_:_) _
search (_:_) [] _ _ _

您必须强制执行一个不变量,以确保这些情况不会发生,或者您应该对它们做一些合理的事情。

通过-Wall运行您的程序可以帮助您捕捉非全局性问题,如这些问题。

(至于广度优先搜索:在Haskell中,如果你写了一个正确的图搜索,如果你的搜索结果不依赖于低级的结果,也不需要严格的要求,那么宽度优先还是深度优先通常取决于结果的使用方式。)

(这是不相关的,但是有一个由空字符串标识的顶点真的是个问题吗?如果图中有一个由空字符串实际标识的顶点,该怎么办?是否存在一个不变量,说明从来没有这种情况?)

票数 5
EN

Stack Overflow用户

发布于 2013-08-07 15:31:43

你没有理由

代码语言:javascript
复制
search [item] [] _ _ _

很明显你的程序在处理这个案子。您是否有一个不变式,说明如果图是空的,那么开始符号就会耗尽?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18107423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档