【发布时间】:2019-10-22 12:27:41
【问题描述】:
我无法正确更正代码,导致图形无向。通过输入,通过条件,应该有一些顶点,边,然后是相邻顶点的列表及其权重
using namespace std;
const int inf = 10000000;
struct edge {
int u, v, w;
};
int n, m, v, i;
vector<edge> e;
void solve() {
vector<int> d(n, inf);
d[v] = 0;
for (;;) {
bool any = false;
for (int j = 0; j < m; ++j)
if (d[e[j].u] < inf)
if (d[e[j].v] > d[e[j].u] + e[j].w) {
d[e[j].v] = d[e[j].u] + e[j].w;
any = true;
}
if (!any) break;
}
cout << d[d.size()-1] << endl;
}
int main() {
cin >> n >> m;
edge t;
for (i = 0; i<m; i++)
{
cin >> t.u >> t.v >> t.w;
t.u--; t.v--;
e.push_back(t);
}
solve();
}
【问题讨论】:
-
如果您说明算法应该做什么以及卡在哪里,这将有所帮助。我猜这是某种最短路径?就个人而言,我不喜欢单字母变量名,因为它们使代码在大多数情况下极难阅读。一个简单的解决方法是在读取输入边时也添加反向边。
-
很难理解你的问题是什么。由于您没有提供任何示例数据,因此人们也很难重新创建。请参考How to create a minimal, recreateable example
标签: c++ algorithm path bellman-ford shortest