C++ C+中的Floyd算法+;

C++ C+中的Floyd算法+;,c++,floyd-warshall,C++,Floyd Warshall,我正在尝试用C语言实现Floryd算法++ 我已经有了: a表示边开始的节点 b表示边结束的节点 t表示边缘的时间 m表示边数 n表示节点数 typedef pair<int,int> nodo; vector <nodo> g[100000]; void preguntarFloyd() { g->clear(); int m; int contador = 0; cin m; for(int k = 0; k <

我正在尝试用C语言实现Floryd算法++

我已经有了:

a表示边开始的节点

b表示边结束的节点

t表示边缘的时间

m表示边数

n表示节点数

typedef pair<int,int> nodo;
vector <nodo> g[100000];

void preguntarFloyd()
{
    g->clear();
    int  m;
    int contador = 0;
    cin m;

    for(int k = 0; k < m ; k++)
    {
        int a, b, t;
        cin >> a >> b >> t;
        g[a].push_back(nodo(b,t));
    }

    for (int k = 0; k < n; k++)
    {
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j <n; j++)
            {
                if(g[i][k].second + g[k][j].second < g[i][j].second )
                {
                    g[i][j].second = g[i][k].second + g[k][j].second;
                }
            }
        }
    }


}
typedef对nodo;
向量g[100000];
void preguntarFloyd()
{
g->clear();
int m;
int contador=0;
cinm;
对于(int k=0;k>a>>b>>t;
g[a]。推回(nodo(b,t));
}
对于(int k=0;k对于(int j=0;j而言,两种最常见的图形表示方法是:

  • 邻接表
  • 邻接矩阵

您有一个数据结构,在初始化阶段,您可以像处理邻接列表一样处理它,然后尝试像访问邻接矩阵一样访问它。显然,这是行不通的…

让人们发现代码中的错误并不是特别有效。您应该使用调试器(或添加打印语句)要隔离问题,请跟踪程序的进度,并将其与预期发生的情况进行比较。一旦两者出现分歧,您就发现了问题。(如果需要,您应该构建一个。)什么是
n
?运行它时您提供了什么输入?发生在哪里?它失败的索引是什么?什么是
n
?但我需要一些帮助,因为我甚至不知道如何实现它!请帮助我:(我不知道具体发生在哪里,因为程序在执行时崩溃了,n表示节点数!这是一个非常棒的答案!我如何才能像访问邻接列表一样访问它???你必须检查列表中的每个元素并搜索特定的边-例如:如果你正在寻找(I,j)在g[I]中搜索对于到j的边。如果没有边,那么在这一步中,路线就不能缩短。注意:你似乎是一个初学者,使用矩阵作为通用格式可能会使你的生活更轻松…在这种情况下,你需要一个特殊的值来表示没有连接(0,-1,INT_MAX,等等)。哦,好的,伙计,谢谢你的提示!