这个程序的有效算法

时间:2012-10-12 17:12:03

标签: c++ algorithm

我必须完成从用户获取的程序:
n - 元素数量
m - 对的数量(两个元素成对)
然后用户将写出所有对> 1和2; 1和3,...
输出应该是具有最多元素>>的数字。其中每个元素与该数字的所有其他元素成对 例如:


INPUT :(第一行n和m)下一行有成对

                                 5 6           
                                 1 2
                                 1 3
                                 1 4
                                 1 5
                                 3 2
                                 4 2

输出:1 2 34 1 2
1 2 3 4不好,因为元素3和4不成对) (1 5也不好,因为1 5对是成对的,但它们不是最大的)


我需要让这个程序在2秒内工作,n = 100000,m到300000 有没有一些有效的方法呢?我试图用所有组合做到这一点,然后我检查了所有元素是否都是成对但是它不是有效的方式(这样做100年

1 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题,你可以保留一个包含10个元素(0-9)的数组,然后为每个元素保留另一个布尔数组,看是否有一对被观察到:

bool pairs[10][10];

当你看到对(1,2)时,你可以这样做:

pairs[1][2] = true;

要确定哪个数字对最多,您可以将布尔值相加。

但是,您确实遇到了(1,2)与(2,1)相同的问题。为了解决这个问题,您可以下订单:

void order(int &a, int &b) {
    if (b < a) swap(a, b);
}