没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
12页
程序设计任务: 设计一个程序,实现以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。基本要求:以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。测试数据:教科书p168图7.13(a)。
资源推荐
资源详情
资源评论
以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和
广度优先遍历
姓名: 班级: 学号: 完成日期:
1.需求分析
程序设计任务: 设计一个程序,实现以邻接表或者邻接矩阵为存储结构,实现连通无向
图的深度优先和广度优先遍历。
基本要求:以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先
遍 历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成
树的边集。
测试数据:教科书 p168 图 7.13(a)。
2.概要设计
ADT Stack{
基本操作:
CreateGraph(ALGraph &G)
//操作结果:图 G 用邻接表表示,创建图;
DFS(ALGraph G, int v)
//操作结果:深度优先搜索遍历图 G,从序号为 v 的顶点出发,对图 G 做一次深度优先
搜索遍历;
DFSB (ALGraph G,int v)
//操作结果:深度搜索的边集;
BFS(ALGraph G,int v)
//操作结果:广度搜索;
BFSB (ALGraph G,int v)
//操作结果:广度搜索的边集;
}ADT Stack
3.详细设计
定义的所有数据类型:
ArcNode 型;VNode 型;QNode 型;int 型;void 型;char 型。
主程序模块:
/*
图的遍历演示以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历.
以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集.
*/
/*
图的遍历演示以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历.
以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集.
*/
int visited[20];
int k,vi,vj;
//=======================================邻接表
#define MAX_N 20
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 vexnum,arcnum; //顶点数和边数
}ALGraph;
//================================图 G 用邻接表表示,创建图
void CreateGraph(ALGraph &G) {
// 图 G 用邻接表表示,创建图
cout<<"请输入顶点数和边数"<<endl;
cin>>G.vexnum>>G.arcnum;
cout<<"输入顶点序列"<<endl;
for(k=1; k<=G.vexnum; k++){
cin>>G.vertices[k].data; //输入顶点序列
G.vertices[k].firstarc=NULL;
}
cout<<"输入与各个顶点相邻的两个边"<<endl;
for(k=1; k<=G.vexnum; k++){
cin>>vi>>vj;
ArcNode *p=new ArcNode,*q=new ArcNode; //动态指针;
p->adjvex=vi;
q->adjvex=vj;
p->nextarc=NULL;
G.vertices[k].firstarc=p;
q->nextarc=NULL;
p->nextarc=q;
p=q;
} //end for
} //end CreateGraph
//=========================================深度优先搜索遍历图 G
void DFS(ALGraph G, int v) {
//从序号为 v 的顶点出发,对图 G 做一次深度优先搜索遍历
visited[v]=1; // 打上访问标记
cout<<G.vertices[v].data<<" ";
ArcNode *x; x=(ArcNode*)malloc(sizeof(ArcNode));
if(!x) exit(-1); x=G.vertices[v].firstarc;
int w;
for (;x;x=x->nextarc) {
w=x->adjvex;
if(!visited[w])
DFS(G,w);
}
}
void DFSB (ALGraph G,int 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<<u<<"--->"<<w<<endl;
DFSB(G,w);
}
}
}
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));
if(!Q.front) exit(-1);
Q.front->next=NULL;
}
剩余11页未读,继续阅读
资源评论
- WONworld2018-01-04老师的要求是非递归,这个是递归,书上就有,不太推荐
ranchocai
- 粉丝: 47
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功