bellman-ford 알고리즘을 작성하려고했는데 작동하지 않습니다. 문제는, 내가 (그리고 누구에게 물어봐도) 실수를 발견 할 수 없다는 것입니다. 나는 그것이 단순한 무언가가되어야한다고 생각합니다. 처음에는 올바른 것처럼 보였습니다. 모든 예제에서 제가 사용했기 때문에 작동이 좋았습니다. 코드는 다음과 같습니다Bellman ford 구현이 작동하지 않습니다.
#include <iostream>
using namespace std;
long long tab[3001][3001];
long long t[3001];
int main()
{
int v,e;
cin >> v >> e;
//number of vertices and edges
for (long long i=0;i<=v;i++)
{
for (long long j=0;j<=v;j++)
{
tab[i][j]=20000000000;
}
}
long long x,y,odl;
for (int i=0;i<e;i++)
{
//unordered vertices
cin >> x >> y >> odl;
tab[x][y]=odl;
tab[y][x]=odl;
}
for (long long i=1;i<=v;i++)
tab[i][i]=0;
for (long long i=1;i<=v;i++)
t[i]=tab[1][i];
bool q;
for (long long i=1;i<e;i++)
{
q=false;
for (long long j=1;j<=v;j++)
{
for (long long k=1;k<=v;k++)
{
if (t[j]>t[k]+tab[k][j])
{
t[j]=t[k]+tab[k][j];
q=true;
}
}
}
//if there was no changes, break
if (!q)
break;
}
for (long long i=1;i<=v;i++)
{
if (t[i]==20000000000)
cout << -1<<endl;
else
cout << t[i]<<endl;
}
}
1에서 (자신을 포함한) 모든 정점에 최단 경로를를 법원 가정 -1 우리가 도달하지 못할의 경우.
작동하지 않는 방법에 대한 정확한 설명을 포함하십시오. "작동하지 않습니다"무언가를 고치려고 시도 할 때 제로입니다. – user463035818
Bellman-Ford가 잘 작동하고 있습니다. Bellman-Ford의 구현은 작동하지 않습니다. –
@MikeNakis argh undone vote, 왜냐하면 나는 두번 상향 투표를하고 싶었 기 때문이다. 그것은 단 정치로 간주 될 수 있지만, 깨진 알고리즘과 깨진 구현을 구별하는 것이 매우 중요합니다. – user463035818