簡體   English   中英

使用DFS查找圖中的最低成本

[英]Finding minimum cost in graph using DFS

我正在嘗試解決hackerrank上的這個問題,該問題涉及計算在受龍卷風影響的許多互聯城市中建立圖書館的最低成本。 我正在使用DFS搜索該圖並查找已連接組件的數量(在這種情況下為城市),並獲得最終費用。 還有一種情況是,在每個城市建造圖書館的成本要比在其他城市建造將人們連接到圖書館的道路要少。 在那種情況下,我只輸出了每個圖書館的建設成本乘以城市數量。 問題的鏈接: https : //www.hackerrank.com/challenges/torque-and-development/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=graphs

由於某種原因,當我的代碼進入else部分時,當我嘗試為每個城市建立鄰接表時,輸出終端會過早退出。 我的邏輯是否正確,還是存在某種范圍問題? 定義變量和函數dfs()的類:

class minCost{
    public:
        vector<vector<int>>adjCities;
        int connComps;
        vector<bool>visited;

        void dfs(int city){
            visited[city]=true;
            for(int i=0;i<adjCities[city].size();i++){
                while(!visited[adjCities[city][i]]){
                    dfs(adjCities[city][i]);
                }
            }
        }
};

main()方法中的其余邏輯:

int main(){
    int q;
    cin>>q;
    for(int i=0;i<q;i++){
        minCost cst;
        int c,r,c_lib,c_road;
        cin>>c>>r>>c_lib>>c_road;
        if(c_lib<=c_road || r==0){
            cout<<c_lib*c<<"\n";
        continue;
        }
        else{
            for(int i=0;i<r;i++){   //does not loop for r=(no. of roads) times
                int c1,c2;
                cin>>c1>>c2;
                cst.adjCities[c1].push_back(c2);
                cst.adjCities[c2].push_back(c1);
            }
            for(int i=1;i<=c;i++){
                if(!cst.visited[i]){
                    cst.dfs(i);
                    cst.connComps++;
                }
            }
            cout<<c_road*(c-cst.connComps)+c_lib*cst.connComps<<"\n";
        }
    }
    return 0;
}

您沒有聲明adjCities的向量的大小並已訪問。 但是您在嘗試使用它時會發現未分配的數組索引。 只需初始化這兩個向量的大小即可。 之后cin >> c >> r >> c_lib >> c_road; 行,將這兩行相加-

cst.adjCities.resize(c+1);
cst.visited.resize(c+1);
cst.connComps = 0;

希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM