本文实例讲述了C语言实现图的搜索算法。分享给大家供大家参考,具体如下:

在游戏中,常常遇到路径规划问题,用到图的相关算法,我们以简单图来学习。
图通常有两种表示方式,矩阵和邻接表。矩阵表示简单,运算快,但当矩阵是稀疏矩阵的时候就存在空间浪费的问题,并且效率也会下降,而邻接表节约空间,并且由于边是连续访问,时间效率也比较高。在本文中,我们将以邻接表来表示图。
#include<queue>
#include<stack>
using namespace std;
struct SE{
int vIndex;
int tag;
SE* next;
};
struct SMap{
SE* pE;
int nnode;
};
void visit(SE *se){
printf("%d\n", se->vIndex);
}
SMap* create_map(int matrix[][6], int n){
SMap* pMap = new SMap();
pMap->nnode = n;
pMap->pE = new SE[n];
memset(pMap->pE, 0, n*sizeof(SE));
for (int i = 0; i<n; i++){
pMap->pE[i].vIndex = i;
pMap->pE[i].tag = 0;
SE* p = &pMap->pE[i];
for (int j = 0; j<n; j++){
if (matrix[i][j] != 0){
p->next = new SE();
p->next->vIndex = j;
p->next->tag = 0;
p->next->next = NULL;
p = p->next;
}
}
}
return pMap;
}
int BFS(SMap* pMap, int n){
queue<SE*> q;
for (int i = 0; i < n; i++){
if (pMap->pE[i].tag == 0){
q.push(&pMap->pE[i]);
while (!q.empty()){
SE *se = q.front();
q.pop();
if (pMap->pE[se->vIndex].tag == 1){
continue;
}
visit(se);
pMap->pE[se->vIndex].tag = 1;
SE * p = se;
while (p->next){
p = p->next;
if (pMap->pE[p->vIndex].tag == 0){
q.push(p);
}
}
}
}
}
return 0;
}
int DFS(SMap* pMap, int n){
stack<SE*> s;
for (int i = 0; i < n; i++){
if (pMap->pE[i].tag == 0){
s.push(&pMap->pE[i]);
while (!s.empty()){
SE *se = s.top();
s.pop();
if (pMap->pE[se->vIndex].tag == 1){
continue;
}
visit(se);
pMap->pE[se->vIndex].tag = 1;
SE * p = &pMap->pE[se->vIndex];
stack<SE*> tmp;
while (p->next){
p = p->next;
if (pMap->pE[p->vIndex].tag == 0){
tmp.push(p);
}
}
while (!tmp.empty()){
s.push(tmp.top());
tmp.pop();
}
}
}
}
return 0;
}
int main(){
int map[6][6] = {
{ 0, 1, 0, 1, 0, 0 },
{ 1, 0, 1, 1, 1, 0 },
{ 0, 1, 0, 1, 0, 0 },
{ 1, 1, 1, 0, 1, 0 },
{ 0, 1, 0, 1, 0, 1 },
{ 0, 0, 0, 0, 1, 0 }
};
SMap* smap = create_map(map, 6);
// BFS(smap, 6);
DFS(smap, 6);
return 0;
}
希望本文所述对大家C语言程序设计有所帮助。
# C语言
# 图
# 搜索算法
# 也会
# 较高
# 给大家
# 将以
# 有两种
# 也比
# 所述
# 但当
# 游戏中
# 讲述了
# lt
# queue
# include
# brush
# cpp
# std
# struct
# namespace
# gt
# stack
相关文章:
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
微信推文制作网站有哪些,怎么做微信推文,急?
制作企业网站建设方案,怎样建设一个公司网站?
如何高效生成建站之星成品网站源码?
公司门户网站制作流程,华为官网怎么做?
建站之星如何通过成品分离优化网站效率?
如何续费美橙建站之星域名及服务?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何获取上海专业网站定制建站电话?
建站之星导航如何优化提升用户体验?
如何通过VPS建站实现广告与增值服务盈利?
,在苏州找工作,上哪个网站比较好?
南宁网站建设制作定制,南宁网站建设可以定制吗?
公司网站设计制作厂家,怎么创建自己的一个网站?
南京网站制作费用,南京远驱官方网站?
广德云建站网站建设方案与建站流程优化指南
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
高防服务器如何保障网站安全无虞?
建站之星北京办公室:智能建站系统与小程序生成方案解析
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Android使用GridView实现日历的简单功能
C#怎么创建控制台应用 C# Console App项目创建方法
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Swift开发中switch语句值绑定模式
如何快速打造个性化非模板自助建站?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
浅析上传头像示例及其注意事项
Swift中swift中的switch 语句
海南网站制作公司有哪些,海口网是哪家的?
微信小程序 input输入框控件详解及实例(多种示例)
如何高效配置IIS服务器搭建网站?
如何在景安云服务器上绑定域名并配置虚拟主机?
代刷网站制作软件,别人代刷火车票靠谱吗?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
制作网站的软件免费下载,免费制作app哪个平台好?
如何自定义建站之星网站的导航菜单样式?
Bpmn 2.0的XML文件怎么画流程图
如何用免费手机建站系统零基础打造专业网站?
如何在IIS7上新建站点并设置安全权限?
如何用IIS7快速搭建并优化网站站点?
测试制作网站有哪些,测试性取向的权威测试或者网站?
如何用花生壳三步快速搭建专属网站?
长沙做网站要多少钱,长沙国安网络怎么样?
如何通过虚拟主机空间快速建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。