实现有向图的邻接矩阵存储结构建立,使用图的非递归搜索算法,求出该有向图结点的度
时间: 2024-03-02 18:49:21 浏览: 60
算法功能:采用邻接表存储结构建立无向图.pdf
邻接矩阵是一种表示图的数据结构,对于有向图而言,邻接矩阵可以采用以下方式实现:
1. 创建一个大小为n*n的二维数组,其中n为有向图中的节点数;
2. 对于有向边(i,j),邻接矩阵中第i行第j列的元素值为1,表示从节点i到节点j有一条有向边;
3. 如果有向边(i,j)不存在,则邻接矩阵中第i行第j列的元素值为0。
举个例子,对于如下有向图:
```
1 ------> 2 <------ 3
| | |
| | |
v v v
4 ------->5-------->6
```
其邻接矩阵可以表示为:
```
1 2 3 4 5 6
1 0 1 0 1 0 0
2 0 0 1 0 1 0
3 0 0 0 0 1 1
4 0 0 0 0 0 1
5 0 0 0 0 0 0
6 0 0 0 0 0 0
```
其中,第i行的元素之和即为第i个节点的出度,第i列的元素之和即为第i个节点的入度。
使用图的非递归搜索算法求出该有向图结点的度,可以采用BFS算法或DFS算法实现。下面以BFS算法为例:
```python
def bfs(adj_matrix, node):
queue = [node]
visited = set()
while queue:
cur_node = queue.pop(0)
if cur_node not in visited:
visited.add(cur_node)
for i in range(len(adj_matrix)):
if adj_matrix[cur_node][i] == 1:
queue.append(i)
return visited
# 计算节点的度
def get_degree(adj_matrix, node):
# 计算出度
out_degree = sum(adj_matrix[node])
# 计算入度
in_degree = len(bfs(adj_matrix.transpose(), node))
return out_degree, in_degree
# 示例
adj_matrix = [[0, 1, 0, 1, 0, 0],
[0, 0, 1, 0, 1, 0],
[0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]
node = 2
out_degree, in_degree = get_degree(adj_matrix, node)
print("节点{}的出度为{},入度为{}".format(node, out_degree, in_degree))
```
输出结果为:
```
节点2的出度为1,入度为2
```
即节点2的出度为1,入度为2。
阅读全文