盲目搜索算法(DFS、BFS、DFS-ID)
admin
2024-02-16 05:21:52
0

目录

概念

BFS

DFS

DFS-ID


概念

盲目搜索算法指的是不使用领域知识的不知情搜索算法。主要包括三种算法:深度优先搜索(DFS)广度优先搜索(BFS)迭代加深(DFS-ID)的深度优先搜索

当树很深、分支因子不大、在树中解出现的位置相对较深时,选择深度优先搜索。

当搜索树的分支因子不太大、在树中解出现的位置在合理的深度级别、路径不是非常深的时候,选择广度优先搜索。

在深度优先和广度优先的基础上,结合二者形成了一种全新的算法:迭代加深的深度优先

PS: 简单的说就是不断扩大搜索深度的深度优先。

使用DFS-ID若没有找到目标,就会执行另一个DFS,深度界限为1,每次迭代深度界限加1,搜索都要重新开始。

BFS是完备和优选的(在各种约束下),但过量的空间需求使其在应用上受到阻碍。

DFS既不是完备也不是优选的,DFS可能变得非常长或迷失在无限的路径中,但是空间需求合理。

DFS-ID同时具备DFS和BFS的有利性,即DFS的合理空间以及BFS的完备和优选,但是每次深度更新都需要把之前探索过的路径重新探索一遍,会存在非常大的时间浪费。

BFS

思路

BFS和DFS都需要准备一个close 标志,表示哪些点已经走过了,不需要再走了,也叫visit 图。

BFS 的基本逻辑就是,遍历周边的4个点,然后把4个点都放在队列里,然后出队首,重新把新的节点的周围4个点放进去,直到遍历到结束点。

代码

#define MaxSize 1000// 边节点
typedef struct ANode
{// 边所指的终点顶点int adjvex;// 下一条边,邻域,指向下一个邻接点struct ANode * nextarc;// 权值int weight;
}ArcNode;// 顶点
typedef struct Vnode
{// 数据域int data;	// 指向的第一条边ArcNode * firstarc;
}VNode;// 邻接表
typedef struct
{VNode adjlist[MaxSize];// n为顶点数,e为边数int n;int e;	
}Graph;// G为邻接点指针,V为初始访问节点
void BFS(Graph * G, int v)
{// 边节点ArcNode * p;// 访问数组int visited[MaxSize];// 队列int Qu[MaxSize];// 初始化循环队列int front = 0, rear = -1;// 当前节点的下标int w;// 初始化访问数组for(int i = 0; i < G->n; i++){visited[i] = 0;}// 访问第一个节点printf("%d\n", v);visited[v] = 1;// 第一个节点入队rear = (rear + 1) % MaxSize;Qu[rear] = v;// 开始广度优先遍历while(front != rear){front = (front + 1) / MaxSize;// 出队w = Qu[front];// 使p指向顶点的第一个边节点p = G->adjlist[w].firstarc;// 循环访问完w的所有边节点while(p != NULL){if(visited[p->adjvex] == 0){// 访问节点printf("%d\n", p->adjvex);visited[p->adjvex] = 1;// 入队rear = (rear + 1) % MaxSize;Qu[rear] = p->adjvex;}p = p -> nextarc;}}}

DFS

思路

深度优先算法的核心是栈,就是说把一个点周围4个节点先放在栈里,然后出栈顶,重新把周围的4个节点放在栈里,直到找到结束点。

代码

//利用C++实现深度优先搜索算法,如有疑问请联系
//作者:cclplus 邮箱:maxwell970710@gmail.com
#include
#include
#include
#includeusing namespace std;vector> tree;//声明一个二维向量
int flag[10];//用于搜索到了节点i的第几个节点
stack stk;//声明一个堆栈
int ar_tree[8] = { 1,1,1,3,5,3,5,7 };
void DFS(int node) {cout << node <<" ";if (flag[node] == 0) {stk.push(node);}int temp;//判断node的子节点是否搜索完成if (flag[node] < tree[node].size()) {temp = tree[node][flag[node]];flag[node]++;DFS(temp);}else {//若已经完成stk.pop();//弹出子节点if (!stk.empty()) {//若堆栈不为空temp = stk.top();//取此时的栈顶元素,即为node的上一级节点DFS(temp);}}
}
int main() {ios::sync_with_stdio(false);memset(flag, 0, sizeof(flag));register int i,temp;tree.resize(10);//图中的数共有九个节点//生成树for (i = 2; i <=9; i++) {temp = ar_tree[i - 2];tree[temp].push_back(i);//表示第i个节点为第temp个节点的子节点}//DFScout << "DFS过程:" << endl;DFS(1);cout << endl;return 0;
}

DFS-ID

思路

所谓深度迭代,就是设置一个深度tag,一旦超过该深度就不再将新节点入栈,如果没有找到结束节点就深度tag++,然后重来一遍。

代码

bool DLS(GrapheMat* graphe, Node* source, NomSom but, int limit) {bool found = false;printf("%s\n", (char*)source->etat);if (strcmp((char*)source->etat, (char*)but) == 0) {return true;}if (limit > 0) {List* listSon = nodeSon(graphe, source);while(!listEpmty(listSon)) {Node* son = (Node*)popList(listSon);if (DLS(graphe, son, but, limit-1)) {return true;}}}return false;
}bool IDDLS (GrapheMat* graphe, NomSom goal, int limit) {bool found = false;node* source = createNode(graphe, graphe->nomS[0]);for (int i = 0; i <= limit; i++) {printf("/nLimit : %d\n", i);DLS(graphe, source, goal, i);}return false;
}

相关内容

热门资讯

什么情况?白银突然暴涨7%逼近... 贵金属市场本周开局表现强劲。尽管围绕美伊和平谈判的最新进展再度受挫,白银价格仍升至两个月高位。 现货...
芯原股份20cm涨停,寒武纪涨... 半导体板块全线走强。芯原股份20cm涨停,寒武纪涨超17%,科创人工智能ETF易方达、科创人工智能E...
现金、动销与未来:五粮液的转身... 2026年4月30日,年报最后截止日,五粮液一纸会计差错更正公告,将2025前三季度营收从609.4...
动荡中的“压舱石”:顶级豪宅为... 文/乐居财经 严明会 “我们梳理了九大‘不确定因素’场景。虽然它们不在基准预测之列,但任何一个若兑现...
AI“三剑客”压阵!小摩:下半... 自2025年以来,新兴市场股市相对发达市场的超额收益已达25%。 这可能仅仅是开始。摩根大通认为,本...
【IPO追踪】胜宏科技(024... 5月11日,AI PCB龙头胜宏科技(02476.HK)大涨13.67%创上市以来新高,市值一举突破...
一周融资汇总:热度不减,11家... 上周(5.5-5.11)机器人行业持续迎来资本热潮。《智能新观察》基于公开信息的不完全统计,梳理出5...
原创 股... 股息到账的喜悦还未褪去,手机突然弹出一条银行扣款短信——“红利差异税扣缴xxx元”。不少股民都经历过...
注意!“三类情形”不合规发票不... “三类情形”不合规发票不能报销,这些风险点要避开! 不符合规定的发票不可以作为报销凭证,任何单位和个...
4月份CPI同比上涨1.2% 5月11日,河北石家庄,顾客在一超市内购买蔬菜。5月11日,国家统计局发布数据显示,4月份,受国际原...
轻舟智航CEO于骞:有智驾的车... 【CNMO科技消息】近日,轻舟智航联合创始人、董事长兼CEO于骞在与凤凰网财经《发现新势力》对话时,...
“双十”增长开局!宁波银行20... 近日,随着宁波银行2026年一季报及2025年年报的相继披露,这家城商行“领头羊”展现出强劲的发展韧...
原创 火... 斑马消费 范建 火锅主业增长触顶,影响资本市场信心。海底捞将破局筹码,押在了多品牌孵化之上。 202...
原创 夯... 作者|娅沁 声明|题图来源于网络。惊蛰研究所原创文章,如需转载请留言申请开白。 近两年,年轻人中开始...
美伊谈判再挫金价,市场转向交易... 据央视新闻,当地时间5月10日,美国总统特朗普在社交媒体表示,伊朗方面的回应“完全不可接受”。据新华...
宗馥莉罢免销售负责人 图片拍摄:界面新闻 赵晓娟 界面新闻记者 |赵晓娟 界面新闻编辑 |牙韩翔 娃哈哈和宏胜饮料...
直击茅台业绩说明会!回应营收确... 【导读】贵州茅台5月11日召开业绩说明会 中国基金报记者 郑俊婷 5月11日下午,贵州茅台在线上召开...
大跌41.8% 智能音箱市场遇... 快科技5月11日消息,最新行业数据显示,2026年第一季度国内智能音箱线上市场行情很冷,整体销量直接...
贵州茅台业绩会直面营利波动,王... 茅台直面了外界关注的诸多核心问题。 图片来源:贵州茅台官微 5月11日,贵州茅台酒股份有限公司(6...
2026合肥贷款中介深度评测:... 合肥专业贷款中介深度评测:合规选品,融资成功率提升65% #### 合肥贷款中介行业格局与核心挑战...