全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C语言实现图的搜索算法示例

本文实例讲述了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小时内与您取得联系。