编写一个程序来查找从给定图中某一个节点到另一个节点的最短路径。


graph = {
    'A': ['B', 'C'],
    'B': ['C', 'D'],
    'C': ['D'],
    'D': ['C'],
    'E': ['F'],
    'F': ['C']
}
start_node = 'A'
end_node = 'D'
这是一个经典的图遍历问题。可以使用广度优先搜索算法（BFS）来查找从一个节点到另一个节点的最短路径。

下面是Python代码实现：

```
from collections import deque

def bfs_shortest_path(graph, start, end):
    # 检查起点和终点是否一致
    if start == end:
        return [start]
    
    # 队列用于存储待查找的节点
    queue = deque([(start,[start])])
    # 记录已访问过的节点
    visited = set()
    
    while queue:
        node, path = queue.popleft()  # 取出队头节点和路径
        
        if node not in visited:
            # 将当前节点标记为已访问
            visited.add(node)
            
            # 遍历当前节点的所有邻居节点
            for neighbor in graph[node]:
                if neighbor not in visited:
                    # 将邻居节点加入队列，更新路径
                    new_path = path + [neighbor]
                    queue.append((neighbor,new_path))
                    
                    # 如果找到终点，返回路径
                    if neighbor == end:
                        return new_path
    
    # 如果遍历完整个图都找不到终点，说明不存在路径
    return None

# 测试
graph = {
    'A': ['B', 'C'],
    'B': ['C', 'D'],
    'C': ['D'],
    'D': ['C'],
    'E': ['F'],
    'F': ['C']
}
start_node = 'A'
end_node = 'D'
shortest_path = bfs_shortest_path(graph, start_node, end_node)
print(shortest_path)  # ['A', 'B', 'D']
```

该代码使用了一个队列来存储待查找的节点，每次取出队头节点并遍历其所有邻居节点，将未访问过的邻居节点加入队列，并更新路径。直到找到终点或者遍历完整个图都没有找到，返回相应结果。