华南农业大学新生c语言竞赛题--分珠

来源:百度知道 编辑:UC知道 时间:2024/05/09 08:23:32
有若干珠子,每颗珠子重量不同,珠子之间有一些细线将它们连在一起。现要求切断一些细线,将它们分成两部分,分割后,单独每一部分的珠子仍保持相连,且要求尽量做到两部分总重相等或相差最少。
请编一程序,给定珠子个数、每颗珠子的重量以及珠子之间的连接情况,输出按上述要求分割后两部分总重的差值的绝对值。

第一行有两个数N与M(1<=N,M<=10),N为珠子个数(珠子编号依次为1,2,3,...,N),M为连接珠子的细线数目。第二行为N个正整数,分别为N个珠子的重量。此后M行,每行两个数X与Y,表示珠子X与珠子Y由细线相连。

按要求分割后两部分总重的差值的绝对值。

正确的程序若输入:

5 5
1 2 3 4 1
1 2
1 3
2 3
3 4
4 5
则输出:
1

这道题其实刚开始看吓人。。。往后一看就乐了,这么小的数据范围,直接搜索就可以。下面是程序

#include <stdio.h>

struct Edge
{
      int x, y;
};

Edge edge[ 10 ];
int n, m, hide[ 10 ][ 10 ], w[ 10 ], Min_c, sum;

void init( )
{
      int i, j, a, b;
      scanf("%d%d", &n, &m);
      sum = 0;
      for ( i = 0; i < n; i++ )
      {
            scanf("%d", &w[ i ]);
            sum += w[ i ];
            for ( j = 0; j < n; j++ )
                  hide[ i ][ j ] = 0;
      }
     &nb