C ++中的Floyd算法

时间:2013-03-07 00:56:45

标签: 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 < 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;
                }
            }
        }
    }


}

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

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

1 个答案:

答案 0 :(得分:1)

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

  • 邻接列表
  • 邻接矩阵

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