• 大小: 120KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-27
  • 语言: 其他
  • 标签: BFSDFS  

资源简介

很多涉及图上操作的算法都是以图的遍历操作为基础的。试写一个程序,演示无向图的遍历操作。 以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。 [测试数据] 由学生依据软件工程的测试技术自己确定。注意测试边界数据,如单个结点。 [实现提示] 设图的结点不超过30个,每个结点用一个编号表示(如果一个图有n个结点,则它们的编号分别为1,2,…,n)。通过输入图的全部边输入一个图,每个边为一个数对,可以对边的输入顺序作出某种限制。注意,生成树的边是有向边,端点顺序不能颠倒。

资源截图

代码片段和文件信息

/*题目: 
以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,
分别输出每种遍历下的结点访问序列和相应生成树的边集。
*/
#include
#include 
#include 
#include 
using namespace std;
int visited[30];        //全局数组记录图中节点访问状态
int kvivj;
//=======================================邻接表
#define MAX_N 30
typedef struct ArcNode  //边结点 

int adjvex;         //该邻接点在顶点数组中的下标
struct ArcNode *nextarc;  //链域指向下一个邻接点 
}ArcNode;
typedef struct VNode      //顶点结点
{
int data;         //顶点信息         
ArcNode *firstarc;    //边链头指针
}VNode AdjList[MAX_N];       //顶点数组(结构体数组)
typedef struct
{   
AdjList vertices;  //邻接表
int vexnumarcnum;   //顶点数和边数
}ALGraph;

/****************************************************************************************
*函数名 :CreateGraph
*函数功能描述 :通过输入边的数对生成图 
*函数参数 :ALGraph &G
*函数返回值 :空 
*****************************************************************************************/
void CreateGraph(ALGraph &G) {
// 图G用邻接表表示创建图
cout<<“请输入顶点数和边数“<    cin>>G.vexnum>>G.arcnum;
cout<<“输入顶点序列“<    for(k = 1; k <= G.vexnum; k++)

cin>>G.vertices[k].data; //输入顶点序列
G.vertices[k].firstarc = NULL;   // 初始化头指针
}
printf(“===========================\n“);
    for (k = 1; k <= G.arcnum; ++k)
{
        printf(“输入每条边上的顶点序号: “);
        scanf(“%d%d“&vi&vj);

        ArcNode *pArcNode = (ArcNode*)malloc(sizeof(ArcNode));
        pArcNode->adjvex = vj;
        pArcNode->nextarc = G.vertices[vi].firstarc;
        G.vertices[vi].firstarc = pArcNode;

        pArcNode = (ArcNode*)malloc(sizeof(ArcNode));
        pArcNode->adjvex = vi;
        pArcNode->nextarc = G.vertices[vj].firstarc;
        G.vertices[vj].firstarc = pArcNode;
    }         //让vi,vj顶点都指向对方 
         
}  

/****************************************************************************************
*函数名 :DFS
*函数功能描述 :深度优先搜索遍历图G 
*函数参数 :G-遍历的图   v-出发顶点 
*函数返回值 :空 
*****************************************************************************************/

void DFS(ALGraph G  int v)  {
  
    visited[v] = 1;                   //访问后置为1 
   cout< ArcNode *x = (ArcNode*)malloc(sizeof(ArcNode));
if(!x)   exit(-1);               //没生成成功退出 
x = G.vertices[v].firstarc; 
int w; 
for (; x; x = x->nextarc)     //将x的邻接点访问 

w = x->adjvex;  
if(!visited[w]) 
DFS(Gw);  //递归调用DFS 
}
}



void DFSB (ALGraph Gint v)//深度搜索的边集

visited[v]=1; 
ArcNode *y; 
y=(ArcNode*)malloc(sizeof(ArcNode));
if(!y) exit(-1);
y=G.vertices[v].firstarc; 
int u=G.vertices[v].data; 
int w; 
for(;y;y=y->nextarc)

w=y->adjvex;  
if(visited[w]==0)

cout<“< DFSB(Gw);  

}
}
typedef struct QNode

int data;
QNode *next;
}QNode*QueuePtr;
typedef struct
{
QueuePtr front; 
QueuePtr rear;
}linkQueue;
void InitQueue (linkQueue &Q)//建立一个空队列

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-01-14 21:19  课程设计之图的遍历\
     文件        6002  2017-01-06 11:15  课程设计之图的遍历\图的遍历.cpp
     文件      130922  2017-01-14 21:18  课程设计之图的遍历\图的遍历报告.docx

评论

共有 条评论

相关资源