學渣帶你刷Leetcode0133克隆圖

題目描述

給你無向 連通 圖中一個節點的引用,請你返回該圖的 深拷貝(克隆)。

圖中的每個節點都包含它的值 val(int) 和其鄰居的列表(list[Node])。

class Node {
    public int val;
    public List<Node> neighbors;
}
 

測試用例格式:

簡單起見,每個節點的值都和它的索引相同。例如,第一個節點值爲 1(val = 1),第二個節點值爲 2(val = 2),以此類推。該圖在測試用例中使用鄰接列表表示。

鄰接列表 是用於表示有限圖的無序列表的集合。每個列表都描述了圖中節點的鄰居集。

給定節點將始終是圖中的第一個節點(值爲 1)。你必須將 給定節點的拷貝 作爲對克隆圖的引用返回。

輸入:adjList = [[2,4],[1,3],[2,4],[1,3]]
輸出:[[2,4],[1,3],[2,4],[1,3]]
解釋:
圖中有 4 個節點。
節點 1 的值是 1,它有兩個鄰居:節點 2 和 4 。
節點 2 的值是 2,它有兩個鄰居:節點 1 和 3 。
節點 3 的值是 3,它有兩個鄰居:節點 2 和 4 。
節點 4 的值是 4,它有兩個鄰居:節點 1 和 3 。

示例 2:

提示:

節點數不超過 100 。
每個節點值 Node.val 都是唯一的,1 <= Node.val <= 100。
無向圖是一個簡單圖,這意味着圖中沒有重複的邊,也沒有自環。
由於圖是無向的,如果節點 p 是節點 q 的鄰居,那麼節點 q 也必須是節點 p 的鄰居。
圖是連通圖,你可以從給定節點訪問到所有節點。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/clone-graph
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

白話題目:
 

算法:

 

詳細解釋關注 B站  【C語言全代碼】學渣帶你刷Leetcode 不走丟 https://www.bilibili.com/video/BV1C7411y7gB

C語言完全代碼

struct Node** visited;

struct Node* dfs(struct Node* s){
    if(s == NULL){
        return NULL;
    }
    if(visited[s->val]){
        return visited[s->val];
    }
    int i;
    struct Node* nd = (struct Node*)malloc(sizeof(struct Node));
    nd->val = s->val;
    nd->numNeighbors = s->numNeighbors;
    visited[nd->val] = nd;
    nd->neighbors = (struct Node**)malloc(sizeof(struct Node*)*nd->numNeighbors);
    for(i = 0; i < nd->numNeighbors; i++){
        nd->neighbors[i] = dfs(s->neighbors[i]);
    }
    return nd;
}
struct Node *cloneGraph(struct Node *s) {
    visited = (struct Node**)malloc(sizeof(struct Node*)*101);
    memset(visited, 0, sizeof(struct Node*)*101);
    //visited = (struct Node **)calloc(101, sizeof(struct Node*));
    //calloc初始化時會自動清理內存,malloc初始化完事後內存空間內爲隨機數據。
    return dfs(s);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章