栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

在游戏中,常常遇到路径规划问题,用到图的相关算法,我们以简单图来学习。

图通常有两种表示方式,矩阵和邻接表。矩阵表示简单,运算快,但当矩阵是稀疏矩阵的时候就存在空间浪费的问题,并且效率也会下降,而邻接表节约空间,并且由于边是连续访问,时间效率也比较高。在本文中,我们将以邻接表来表示图。

#include
#include
using namespace std;
struct SE{
  int vIndex;
  int tag;
  SE* next;
};
struct SMap{
  SE* pE;
  int nnode;
};
void visit(SE *se){
  printf("%dn", 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; ipE[i].vIndex = i;
    pMap->pE[i].tag = 0;
    SE* p = &pMap->pE[i];
    for (int j = 0; jnext = 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 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 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 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语言程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/63564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号