算法6.4-6.6DFS

一个不知名大学生,江湖人称菜狗
original author: Jacky Li
Email : 3435673055@qq.com

Time of completion:2024.03.27

Last edited: 2024.03.27

目录

算法6.4-6.6DFS

第1关:算法6.5采用邻接矩阵表示图的深搜

任务描述

相关知识

编程要求

输入输出说明

测试说明

代码如下:

第2关:算法6.6采用邻接表表示图的深搜

任务描述

相关知识

编程要求

输入输出说明

测试说明

代码如下:

第3关:算法6.4非连通图的深搜-邻接矩阵表示图

任务描述

相关知识

编程要求

输入输出说明

测试说明

代码如下:

作者有言

算法6.4-6.6DFS

第1关:算法6.5采用邻接矩阵表示图的深搜

任务描述

本关任务:编写一个采用邻接矩阵表示图的深搜程序。

相关知识

为了完成本关任务,你需要掌握:1.如何创建邻接矩阵2.如何对图进行深搜。

编程要求

根据提示,在右侧编辑器补充代码,输出由一个顶点出发的深搜路径,顶点之间间隔四个空格。

输入输出说明

输入说明: 第一行为顶点数n和边数e 第二行为n个顶点符号 接下来e行为e条边,每行两个字符代表无向图的一条边 最后一行仅包含一个字符,代表深搜开始顶点 输出说明: 一条路径,顶点之间相隔四个空格

测试说明

平台会对你编写的代码进行测试:

测试输入:

4 5 a b c d a b a c a d b c c d c 测试输出: c a b d

代码如下:

//算法6.5 采用邻接矩阵表示图的深度优先搜索遍历

#include <iostream>
using namespace std;

#define MVNum 100							//最大顶点数
typedef char VerTexType;					//假设顶点的数据类型为字符型 
typedef int ArcType;                 		//假设边的权值类型为整型 

//------------图的邻接矩阵------------------
typedef struct{ 
	VerTexType vexs[MVNum];            		//顶点表 
	ArcType arcs[MVNum][MVNum];      		//邻接矩阵 
	int vexnum,arcnum;                		//图的当前点数和边数 
}Graph;

bool visited[MVNum];           				//访问标志数组,其初值为"false" 
int FirstAdjVex(Graph G , int v);			//返回v的第一个邻接点
int NextAdjVex(Graph G , int v , int w);	//返回v相对于w的下一个邻接点

int LocateVex(Graph G , VerTexType v){
	//确定点v在G中的位置
	for(int i = 0; i < G.vexnum; ++i)
		if(G.vexs[i] == v)
			return i;
		return -1;
}//LocateVex

void CreateUDN(Graph &G){ 
    //采用邻接矩阵表示法,创建无向网G 
	int i , j , k;
    cin >> G.vexnum >> G.arcnum;							//输入总顶点数,总边数

    for(i = 0; i < G.vexnum; ++i){   
		cin >> G.vexs[i];                        			//依次输入点的信息 
	}	
	

    for(i = 0; i < G.vexnum; ++i)                			//初始化邻接矩阵,边的权值均置为极大值MaxInt 
		for(j = 0; j < G.vexnum; ++j)   
			G.arcs[i][j] = 0;  

	for(k = 0; k < G.arcnum;++k){							//构造邻接矩阵 
		VerTexType v1 , v2;
		cin >> v1 >> v2;									//输入一条边依附的顶点及权值
		i = LocateVex(G, v1);  j = LocateVex(G, v2);		//确定v1和v2在G中的位置,即顶点数组的下标 
		G.arcs[j][i] = G.arcs[i][j] = 1;					//置<v1, v2>的对称边<v2, v1>的权值为w 
	}//for
}//CreateUDN 

void DFS(Graph G, int v){        		
	//图G为邻接矩阵类型 
	/****************************Begin**********************/
  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羁旅少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值