UVA 10004我正在尝试解决UVA 10004双色问题

时间:2019-03-27 09:29:59

标签: c++

我正在尝试解决UVA10004,大多数结果都是正确的 但不是全部。
这就是我想要做的:
首先,制作3维向量 [节点] [相邻] [颜色]
例如,nodes:0、1、2边:01 02 12
就像
0 1 2
1 0 2
2 0 1
它的颜色将在每个节点下,使其成为3维向量

默认颜色为0
然后将第一个节点[0] [0]绘制为颜色1 => [0] [0] [1] = 1
然后遍历所有节点
如果节点的颜色为0,则检查节点之前是否已被着色
 如果不是,则检查节点的第一列是否为1,然后使其为2
                                               如果是2,则设为1
之后
检查每一行
颜色应为1 2 2 2 ....或2 1 1 1 1 ..... =>双色
如果不是,那么它将不是双色的

所以,我不确定这是否有意义.....
这是测试用例
https://www.udebug.com/UVa/10004

当我尝试测试输入时,它将获得正确的输出 但是在我将代码提交给https://uva.onlinejudge.org/之后 只是说错了答案

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;
void main()
{
int numOfNodes;
int numOfEdges;
vector <int> color;
vector<vector<int>> adjacent;
vector <vector <vector<int>>> nodes;

while(cin >> numOfNodes && numOfNodes)
{
    for(int i = 0; i < numOfNodes; i++)
    {
        color.push_back(i);
        color.push_back(0);
        adjacent.push_back(color);
        nodes.push_back(adjacent);
        color.clear();
        adjacent.clear();
    }

    cin >> numOfEdges;

    for(int i = 0; i < numOfEdges; i++) //build table
    {
        int edgeBegin, edgeEnd;
        cin >> edgeBegin >> edgeEnd;
        color.push_back(edgeEnd);
        color.push_back(0);
        adjacent.push_back(color);
        nodes[edgeBegin].push_back(color);
        color.clear();
        adjacent.clear();
        color.push_back(edgeBegin);
        color.push_back(0);
        adjacent.push_back(color);
        nodes[edgeEnd].push_back(color);
        color.clear();
        adjacent.clear();
    }



    for(int i = 0; i < nodes.size(); i++) //paint table
    {
        for(int j = 0; j < nodes[i].size(); j++)
        {
            for(int m = 0; m < nodes.size(); m++)
            {
                for(int n = 0; n < nodes[m].size(); n++)
                {
                    if(nodes[m][n][0] == nodes[i][j][0]) //same number
                    {
                        //cout<<"check"<<endl;
                        if(nodes[m][n][1] == 1)
                        {
                            nodes[i][j][1] = 1;
                        }
                        else if(nodes[m][n][1] == 2)
                        {
                            nodes[i][j][1] = 2;
                        }
                    }
                }
            }

            if(j == 0 && i == 0)
            {
                nodes[i][j][1] = 1;
                continue;
            }
            else
            {
                for(int m = 0; m < nodes.size(); m++)
                {
                    if(j >= 1)
                    {
                        if(nodes[i][0][1] == 1)
                        {
                            if(nodes[i][j][1] == 0)
                            {
                                nodes[i][j][1] = 2;
                            }
                            else
                            {
                                break;
                            }
                        }
                        else if(nodes[i][0][1] == 2)
                        {
                            if(nodes[i][j][1] == 0)
                            {
                                nodes[i][j][1] = 1;
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }
    }


    bool bicolorable = true;

    for(int i = 0; i < nodes.size(); i++)
    {
        int firstColor = nodes[i][0][1];

        for(int j = 1; j < nodes[i].size(); j++)
        {
            if(firstColor == nodes[i][j][1])
            {
                bicolorable = false;
            }
        }
    }

    if(bicolorable == true)
    {
        cout << "BICOLORABLE." << endl;
    }
    else if(bicolorable == false)
    {
        cout << "NOT BICOLORABLE." << endl;
    }

    color.clear();
    adjacent.clear();
    nodes.clear();
}
}

0 个答案:

没有答案