lintcode814. 无向图中的最短路径 bfs

给定一个无向图, 图中所有边的长度为1, 再选定图中的两个节点, 返回这两个节点之间最短的路径的长度.

样例
样例 1:

输入: graph = {1,2,4#2,1,4#3,5#4,1,2#5,3}, node1 = 3, node2 = 5
输出: 1
解释: 
  1------2  3
   \     |  | 
    \    |  |
     \   |  |
      \  |  |
        4   5
样例 2:

输入: graph = {1,2,3,4#2,1,3#3,1#4,1,5#5,4}, node1 = 1, node2 = 5
输出: 2
说明
关于树的表示
/**
 * Definition for Undirected graph.
 * struct UndirectedGraphNode {
 *     int label;
 *     vector<UndirectedGraphNode *> neighbors;
 *     UndirectedGraphNode(int x) : label(x),{};
 * };
 */
class Solution {
public:
    /**
     * @param graph: a list of Undirected graph node
     * @param A: nodeA
     * @param B: nodeB
     * @return:  the length of the shortest path
     */
    int shortestPath(vector<UndirectedGraphNode*> graph, UndirectedGraphNode* A, UndirectedGraphNode* B) {
        // Write your code here
        set<UndirectedGraphNode*> visit;//防止重复遍历同一节点
        queue<UndirectedGraphNode*> q;//储存节点
        queue<int>cnt;//储存到达步数
        q.push(A);
        cnt.push(0);
        visit.insert(A);
        while(!q.empty())
        {
            UndirectedGraphNode*cur=q.front();
            int count=cnt.front();
            q.pop();
            cnt.pop();
            for(auto node:cur->neighbors)
            {
                if(node==B) return count+1;
                else if(!visit.count(node))
                {
                    q.push(node);
                    cnt.push(count+1);
                    visit.insert(node);
                }
                else continue;
            }
        }
        return 0;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值