当前位置: 首页 > 知识库问答 >
问题:

如何填充带权图的邻接表?

段志
2023-03-14

我正在尝试用C++读取一个文件,并填充表示邻接列表的向量。该文件包含一个无向加权图的邻接列表表示。每一行都由与该特定顶点相邻的节点元组以及该边的长度组成。例如,第6行具有6作为指示该行对应于标记为6的顶点的第一条目。这一行的下一个条目“141,820 0”指示在顶点6和顶点141之间存在长度为8200的边。这一行的其余对指示与顶点6相邻的其他顶点和相应边的长度。

文件例如:-

1 3,4 2,20 5,89
2 4,7 1 102

ifstream ifs;
string line;
ifs.open("dijkstraData.txt");
cout<<log(vertices)<<" "<<loops<<endl;
std::vector<vector < std::pair < int,int > > > CadjList(vertices);
while(getline(ifs,line)){
    // transfer the line contents to line_stream
    stringstream line_stream(line);
    //now what
}    

共有1个答案

谢涵煦
2023-03-14

首先,我提取了顶点并将其放入a中,然后,我将所有后续字符串提取为rest,然后,只需要找到逗号并将两个子字符串转换为整数。我使用atoi将字符串转换为int,因为我的机器上没有C++11,但我将建议更新您的gcc并使用std::stoi。

while(getline(ifs,line)){
        stringstream line_stream(line);
        line_stream>>a;
        while(line_stream>>rest){
            int pos = rest.find(",");
            string vertex = rest.substr(0,pos);
            string weight = rest.substr(pos+1,rest.length() - pos);
            int ver = atoi(vertex.c_str());
            int wei = atoi(weight.c_str());
            pair<int,int> foo(ver,wei);
            v[a-1].push_back(foo);
        }
    }
 类似资料:
  • Ive得到了一个JFrame,并将LayoutManager设置为BorderLayout,然后继续添加带有图像的JLabel。但是,当我调整框架的大小时,JLabel不会调整大小。我没有向North,S,E等添加任何组件。我希望简单地让标签内的图像填满整个框架,当然,让我的菜单保持机智。

  • 作为一项练习,我必须建立一个卫星导航系统,规划从一个位置到另一个位置的最短和最快路线。它必须尽可能快,而不需要使用太多内存。 我很难决定使用哪种结构来表示图形。我知道矩阵更适合密集图,列表更适合稀疏图。我更倾向于使用列表,因为我认为添加顶点将是这个程序中最累人的部分。 我只是想听听你们的意见。如果我把一个典型的路线图看作一个图形,其中不同的位置是节点,道路是边缘。你认为它是稀疏的还是密集的?在这种

  • B)设是带有向图(无环多边)的一个邻接矩阵,其中是边到的一个权重。如果没有这样的边并且对于evrey我们有。矩阵。槽表示什么?最小权重?还是...? 知道吗? 编辑:我的意思是这些算法在图中找到哪一个?找到最大重量?最小重量?什么也没找到?

  • 例如,让我们假设,在表1中,我有以下列 在表2中,我有相同的两列,但有5000行。让我们考虑5行, 现在,在我的工作表2中,我有5000行,A列填充了,但我希望根据工作表1中的值自动填充B列。我尝试过使用间接函数,但没有成功。我使用的公式是,其中test是我的工作表名。谁能告诉我这个问题出在哪里,或者有没有其他方法来解决这个问题?谢谢你。

  • 我无法用地图填充TableView 我有一个类,它拥有一个以产品名称为键、以正常价格为值的地图。我创建了一个tableView,其中一列是名称,一个主列是价格,分为两列normal和new,如下所示。 我已经做了这个方法使地图成为一个可观察列表。 这就是我卡住的地方。我不知道如何用这个可观察列表填充每个单元格。我确实知道我必须以某种方式使用“setCellFactory”。有人有什么建议吗?如何制