繁体   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