图的邻接矩阵存储及遍历

这里采用图的邻接矩阵存储(即为二维数组)

遍历:DFS和BFS

#include<cstdio>
#include<iostream>
#include<cstring> 
#include<queue>
using namespace std;
const int MAX=100;

typedef struct{
	char vexs[MAX];  //存储顶点 
	int arcs[MAX][MAX];  //存储边之间的路径 
	int vexnum,arcnum; //顶点数目 
}Graph;

Graph G;
bool flag[MAX];

void createG()//图的邻接矩阵存储 
{
	memset(G.arcs,0,sizeof(G.arcs));
	cin>>G.vexnum>>G.arcnum;
	int a,b;
	for(int i=1;i<=G.arcnum;i++){
		cin>>a>>b;
		G.arcs[a][b]=G.arcs[b][a]=1;
	}
}

void DFS(int v) //深度优先遍历 
{
	flag[v]=1;
	cout<<v<<" ";
	for(int i=1;i<=G.vexnum;i++){
		if(G.arcs[v][i]&&!flag[i]) //该点和其他点之间有连接且未曾被遍历 
			DFS(i);
	}
}


void BFS(int v)
{
	memset(flag,0,sizeof(flag));
	flag[v]=1;
	cout<<v<<" ";
	queue<int> q;
	q.push(v);
	while(!q.empty()){//判空也可用q.size()
		int w=q.front();
		q.pop();
		for(int i=1;i<=G.vexnum;i++){
			if(G.arcs[w][i]&&!f
所提供的引用内容中未提及头歌平台邻接矩阵存储遍历操作第四关的相关内容,因此无法根据引用给出该关卡的解决方案。不过,一般来说,邻接矩阵存储遍历操作包含以下关键要点: ### 邻接矩阵存储 邻接矩阵通过一个一维数组存储顶点,一个二维数组存储顶点之间的相邻关系。对于一个顶点数为 n 的,其邻接矩阵是 n×n 的方阵。对于不带权的,二维数组 `a[i][j] = 1` 代表 i 和 j 相连,`a[i][j] = 0` 代表不相连;对于带权的,`a[i][j] = k` 代表 i 和 j 之间的权为 k [^2]。 以下是一个简单的邻接矩阵存储的 Python 代码示例: ```python class Graph: def __init__(self, num_vertices): self.num_vertices = num_vertices self.adj_matrix = [[0] * num_vertices for _ in range(num_vertices)] def add_edge(self, i, j, weight=1): self.adj_matrix[i][j] = weight self.adj_matrix[j][i] = weight # 无向 # 创建一个包含 4 个顶点的 g = Graph(4) # 添加边 g.add_edge(0, 1) g.add_edge(0, 2) g.add_edge(1, 3) ``` ### 遍历操作 常见的遍历算法有度优先索(DFS)和广度优先索(BFS)。 #### 度优先索(DFS) ```python def dfs(graph, start, visited=None): if visited is None: visited = set() if start not in visited: print(start, end=' ') visited.add(start) for i in range(len(graph.adj_matrix[start])): if graph.adj_matrix[start][i] == 1 and i not in visited: dfs(graph, i, visited) # 调用 DFS 遍历 dfs(g, 0) ``` #### 广度优先索(BFS) ```python from collections import deque def bfs(graph, start): visited = set() queue = deque([start]) visited.add(start) while queue: vertex = queue.popleft() print(vertex, end=' ') for i in range(len(graph.adj_matrix[vertex])): if graph.adj_matrix[vertex][i] == 1 and i not in visited: queue.append(i) visited.add(i) # 调用 BFS 遍历 bfs(g, 0) ``` ### 通关指南思路 在头歌平台完成邻接矩阵存储遍历操作第四关时,需要确保: 1. 正确实现邻接矩阵存储结构。 2. 能够根据题目要求进行的初始化,添加边等操作。 3. 实现正确的遍历算法(DFSBFS),并输出符合题目要求的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值