0

プロジェクトでは、グラフの色付けの問題に対する解決策を実装する必要があります。ただし、入力には、変数に格納するために必要なデータにアクセスするために解析する方法がわからない特定の構文が必要です。

入力制約は、最初に色の数を入力し、次に頂点の数を入力し、その後に一連のエッジを入力します。エッジは の形式で入力する必要があります(v1 v2)。シーケンスは v1 = -1 で終了します。だから、、、(-1 0)など(-1 -1)

したがって、入力は次のようなものになります。

2 4 (0 1)(1 2)(2 3)(3 0)(-1 -1)

どこから始めればいいのかわからないので、どんな助けでも大歓迎です!ここにも同様の質問があることは知っていますが、この特定の実装にソリューションを適用する方法がわかりません。

4

2 に答える 2

2

次のようなことを試してください:

#include <iostream>

static inline int error(int n) { std::cerr << "Input error!\n"; return n; }

int main()
{
    int nc, nv;  // number of colours and vertices

    if (!(std::cin >> nc >> nv)) { return error(1); }

    for (int i = 0; i != nv; ++i)
    {
        char lb, rb;
        int v1, v2;
        if (!(std::cin >> lb >> v1 >> v2 >> rb) || lb != '(' || rb != ')') { return error(1); }

        std::cout << "We have a pair [" << v1 << ", " << v2 << "]\n";
    }
}

入力処理の重要な原則に注意してください。すべての入力操作は、条件付きコンテキスト内に表示されます。@jedwards が言うように、入力はstd::istream、文字列ストリームやファイル ストリームなど、または私の例のように任意にすることができますstd::cin

于 2012-05-06T00:21:37.757 に答える
0

You might want to look into the standard input/output. Basically, ask for the user to enter the input, and get it like this: std::string mystr; std::getline(con, mystr); and then parse it using the >> operator and std::stringstream. You can skip spaces or parenthesis by just storing it in a char. So, to get the first two numbers, do: int colors, verts; char c; stringstream(mystr) >> colors >> c >> verts; You can then expand this for the rest of your input.

于 2012-05-06T00:18:40.897 に答える