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

グラフを表す最も一般的な 2 つの方法は次のとおりです。

  • 隣接リスト
  • 隣接行列

1 つのデータ構造があり、初期化フェーズでそれが隣接リストであるかのように処理し、隣接マトリックスであるかのようにアクセスしようとします。明らかにこれはうまくいきません...

于 2013-03-07T01:06:19.797 に答える