python 遍历graph
时间: 2023-07-02 10:21:22 浏览: 95
在Python中,可以使用以下代码遍历图:
```
# 创建一个图的邻接表表示
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
# 深度优先遍历
def dfs(node):
visited.add(node)
print(node)
for neighbor in graph[node]:
if neighbor not in visited:
dfs(neighbor)
# 广度优先遍历
def bfs(start):
visited, queue = set(), [start]
while queue:
node = queue.pop(0)
if node not in visited:
visited.add(node)
print(node)
queue.extend([n for n in graph[node] if n not in visited])
```
其中,深度优先遍历使用递归实现,从起始节点开始遍历,并递归遍历其所有未被访问过的邻居节点;广度优先遍历使用队列实现,从起始节点开始遍历,将其邻居节点加入队列,并逐个访问队列中的节点。
相关问题
python 遍历图
在 Python 中,你可以使用邻接表或邻接矩阵来表示图,然后使用递归或迭代算法来遍历图。以下是使用邻接表和深度优先遍历算法来遍历无向图的示例代码:
``` python
class Graph:
def __init__(self):
self.graph = {}
def add_edge(self, u, v):
if u not in self.graph:
self.graph[u] = []
if v not in self.graph:
self.graph[v] = []
self.graph[u].append(v)
self.graph[v].append(u)
def DFS(self, v, visited):
visited.add(v)
print(v, end=' ')
for neighbor in self.graph[v]:
if neighbor not in visited:
self.DFS(neighbor, visited)
def DFS_traversal(self):
visited = set()
for vertex in self.graph:
if vertex not in visited:
self.DFS(vertex, visited)
g = Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(2, 3)
g.add_edge(3, 3)
g.DFS_traversal()
```
这段代码使用了深度优先遍历算法来遍历无向图,输出结果为:0 1 2 3。
你也可以使用广度优先遍历算法来遍历图。
用python遍历读取images文件夹里的图片和image_enbeded文件夹里的图片,根据序号一一对应,用tensorflow库进行PSNR峰值信噪比计算
以下是可能的实现:
```python
import os
import tensorflow as tf
# 定义图片文件夹路径
img_folder = 'images'
img_embed_folder = 'image_enbeded'
# 获取图片文件夹和图片编码文件夹中的所有文件名
img_filenames = sorted(os.listdir(img_folder))
img_embed_filenames = sorted(os.listdir(img_embed_folder))
# 检查文件名是否一一对应
assert len(img_filenames) == len(img_embed_filenames)
# 创建计算PSNR的TensorFlow图
with tf.Graph().as_default(), tf.Session() as sess:
# 创建输入placeholder
img_ph = tf.placeholder(tf.uint8, [None, None, 3])
img_embed_ph = tf.placeholder(tf.uint8, [None, None, 3])
# 转换为float类型
img = tf.image.convert_image_dtype(img_ph, tf.float32)
img_embed = tf.image.convert_image_dtype(img_embed_ph, tf.float32)
# 计算PSNR
psnr = tf.image.psnr(img, img_embed, max_val=1.0)
# 循环遍历所有图片
for i in range(len(img_filenames)):
# 读取图片
img_path = os.path.join(img_folder, img_filenames[i])
img_embed_path = os.path.join(img_embed_folder, img_embed_filenames[i])
img_data = tf.gfile.FastGFile(img_path, 'rb').read()
img_embed_data = tf.gfile.FastGFile(img_embed_path, 'rb').read()
img_tensor = tf.image.decode_jpeg(img_data)
img_embed_tensor = tf.image.decode_jpeg(img_embed_data)
# 运行计算PSNR的图
psnr_value = sess.run(psnr, feed_dict={img_ph: img_tensor, img_embed_ph: img_embed_tensor})
# 输出结果
print('Image {}: PSNR = {:.2f}'.format(i+1, psnr_value))
```
这段代码首先定义了图片文件夹的路径和图片编码文件夹的路径,然后获取所有文件名并检查它们是否一一对应。接下来,创建了一个TensorFlow图,用于计算PSNR。该图包含了两个输入placeholder,用于传递两张图片的数据。首先将图片的数据转换为float类型,然后计算PSNR。在循环遍历所有图片时,读取图片数据并将其传递给计算PSNR的图。最后,输出结果。
阅读全文