0

我正在尝试在 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;
                }
            }
        }
    }


}

当我尝试代码时,程序崩溃说:“表达式:向量下标超出范围”

我希望你们能帮助我,因为我无法解决这个问题!

4

1 回答 1

1

表示图的两种最常见的方法是:

  • 邻接表
  • 邻接矩阵

你有一个数据结构,在初始化阶段你处理它就像它是一个邻接列表然后你尝试访问它,就像它是一个邻接矩阵一样。显然这永远不会奏效......

于 2013-03-07T01:06:19.797 回答