日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1129. 颜色交替的最短路径(BFS)

發布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1129. 颜色交替的最短路径(BFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

在一個有向圖中,節點分別標記為 0, 1, ..., n-1。
這個圖中的每條邊不是紅色就是藍色,且存在自環或平行邊。

red_edges 中的每一個 [i, j] 對表示從節點 i 到節點 j 的紅色有向邊
類似地,blue_edges 中的每一個 [i, j] 對表示從節點 i 到節點 j 的藍色有向邊

返回長度為 n 的數組 answer,其中 answer[X] 是從節點 0 到節點 X 的紅色邊和藍色邊交替出現最短路徑的長度。
如果不存在這樣的路徑,那么 answer[x] = -1。

示例 1: 輸入:n = 3, red_edges = [[0,1],[1,2]], blue_edges = [] 輸出:[0,1,-1]示例 2: 輸入:n = 3, red_edges = [[0,1]], blue_edges = [[2,1]] 輸出:[0,1,-1]示例 3: 輸入:n = 3, red_edges = [[1,0]], blue_edges = [[2,1]] 輸出:[0,-1,-1]示例 4: 輸入:n = 3, red_edges = [[0,1]], blue_edges = [[1,2]] 輸出:[0,1,2]示例 5: 輸入:n = 3, red_edges = [[0,1],[0,2]], blue_edges = [[1,0]] 輸出:[0,1,1]提示: 1 <= n <= 100 red_edges.length <= 400 blue_edges.length <= 400 red_edges[i].length == blue_edges[i].length == 2 0 <= red_edges[i][j], blue_edges[i][j] < n

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/shortest-path-with-alternating-colors
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 分兩種情況從 0 出發,紅色,或者藍色
  • 每個點的訪問標記 vis 有 2 個狀態(紅的訪問沒?藍的訪問沒?)
class Solution { public:vector<int> shortestAlternatingPaths(int n, vector<vector<int>>& red_edges, vector<vector<int>>& blue_edges) {vector<vector<int>> dis(2, vector<int>(n, INT_MAX));vector<vector<int>> r(n), b(n);for(auto& e : red_edges)r[e[0]].push_back(e[1]);for(auto& e : blue_edges)b[e[0]].push_back(e[1]);//建圖bfs(r,b,0,dis);//出發,case1bfs(r,b,1,dis);//出發,case2vector<int> ans(n,-1);for(int i = 0; i < n; ++i){ans[i] = min(dis[0][i], dis[1][i]);if(ans[i] == INT_MAX)ans[i] = -1;}return ans;}void bfs(vector<vector<int>>& r, vector<vector<int>>& b, int flag, vector<vector<int>>& dis){int n = r.size(), cur, size, step = 0;vector<vector<bool>> vis(2, vector<bool>(n, false));//訪問標記queue<int> q;q.push(0);vis[flag][0] = true;while(!q.empty()){size = q.size();while(size--){cur = q.front();dis[flag][cur] = min(dis[flag][cur], step);//取最小的路徑q.pop();if(flag)//走紅色的{for(auto nt : r[cur]){if(vis[flag][nt])//訪問過了,不能再次訪問continue;vis[flag][nt] = true;q.push(nt);}}else//走藍色的{for(auto nt : b[cur]){if(vis[flag][nt])continue;vis[flag][nt] = true;q.push(nt);}}}step++;//步數+1flag = !flag;//換地圖顏色}} };

36 ms 13.6 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 1129. 颜色交替的最短路径(BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。