| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3296 人关注过本帖
标题:uva 10160
取消只看楼主 加入收藏
brian1994
Rank: 2
来 自:广东省中山市一中
等 级:论坛游民
帖 子:63
专家分:47
注 册:2011-5-15
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:6 
uva 10160
题目大意:有n个点(3<=n<=35),有m条边连接点与点。如果在某个点安装电灯,该点与相连的点都有光亮。写个程序装最小的灯使所有点都有光亮。
若干组数据,以n=0 m=0结束。
样例输入
8 12
1 2
1 6
1 8
2 3
2 6
3 4
3 5
4 5
4 7
5 6
6 7
6 8
8 10
1 2
1 3
1 4
1 5
6 2
6 3
6 4
6 5
1 7
7 8
0 0
样例输出
2
2


我的程序不知错哪了
程序代码:
#include<cstdio>
#include<cstring>
#define oo 2000000000
#define min(a,b)((a)<(b)?(a):(b))
int n,m,x,y,ans;
int road[36][36];
bool map[36][36];

void doit(int num,int x,bool a[],int station)
{
     if (!a[x]) return; 
     station++; num++; a[x]=false;
     for (int i=1;i<=road[x][0];i++)
       if (a[road[x][i]])
       {
          num++;
          a[road[x][i]]=false;
       }
     if (num==n) 
     {
        ans=min(ans,station);
        return;
     }
     for (int j=x+1;j<=n;j++)
     doit(num,j,a,station);
}

int main()
{
    bool b[36];
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    while (scanf("%d%d",&n,&m)==2 && (n || m))
    {
          //special
          if (m==0) {printf("%d\n",n); continue;}
          //fill
          memset(road,0,sizeof(road));
          memset(map,false,sizeof(map));
          memset(b,true,sizeof(b));
          ans=oo;
          //read
          for (int i=1;i<=m;i++)
          {
              scanf("%d%d",&x,&y);
              if (x==y) continue;
              map[x][y]=map[y][x]=true;
              road[x][++road[x][0]]=y;
              road[y][++road[y][0]]=x;
          }
          //doit 
          for (int i=1;i<=n;i++) 
          {
              doit(0,i,b,0);
              memset(b,true,sizeof(b));
          }
          //print
          printf("%d\n",ans);
    }
    return 0;
}
搜索更多相关主题的帖子: 连接点 color 
2011-08-15 10:44
brian1994
Rank: 2
来 自:广东省中山市一中
等 级:论坛游民
帖 子:63
专家分:47
注 册:2011-5-15
收藏
得分:0 
为何没人啦?????
2011-08-16 15:50
brian1994
Rank: 2
来 自:广东省中山市一中
等 级:论坛游民
帖 子:63
专家分:47
注 册:2011-5-15
收藏
得分:0 
求助啊!!求助啊!!求助啊!!求助啊!!求助啊!!求助啊!!求助啊!!求助啊!求助啊!求助啊!
2011-08-17 08:20
brian1994
Rank: 2
来 自:广东省中山市一中
等 级:论坛游民
帖 子:63
专家分:47
注 册:2011-5-15
收藏
得分:0 
回复 4楼 QQ346957135
换个说法:有n个城市由m条路相连,若在A城市安装一个发电站,那么A城市以及与A城市相连的城市都有电力供应(即可以用电)。问最少要安装多少个发电站,可以使n个城市都有电力g'o
2011-08-18 09:29
brian1994
Rank: 2
来 自:广东省中山市一中
等 级:论坛游民
帖 子:63
专家分:47
注 册:2011-5-15
收藏
得分:0 
上面的g'o 应该是供应,我打错了
2011-08-18 09:30
brian1994
Rank: 2
来 自:广东省中山市一中
等 级:论坛游民
帖 子:63
专家分:47
注 册:2011-5-15
收藏
得分:0 
一家公司在n个小镇里销售电脑(3<=n<=35),这些小镇编号为1,2,3,...n。有m条直达道路连接这些小镇。公司决定建一些服务站,保证对任意一个小镇x,要么该镇自己有服务站,要么直接与之相邻的某个小镇内有服务站。
写一个程序计算该公司最少需要建多少个服务站。

输入包含多组数据。每组以小镇数n和道路数m开头,用空格隔开接下来m行每行包含一个整数对,表示两个被直接连接的小镇编号,用空格隔开。输入以n=0且m=0作为结束标志。

对每组数据输出一行,表示最小的服务站数量。

样例输入
 8 12
 1 2
 1 6
 1 8
 2 3
 2 6
 3 4
 3 5
 4 5
 4 7
 5 6
 6 7
 6 8
 8 10
 1 2
 1 3
 1 4
 1 5
 6 2
 6 3
 6 4
 6 5
 1 7
 7 8
 0 0
 样例输出
 2
 2

已经按书上打了,在不明白也没办法。。。
2011-08-22 08:15
brian1994
Rank: 2
来 自:广东省中山市一中
等 级:论坛游民
帖 子:63
专家分:47
注 册:2011-5-15
收藏
得分:0 
听说是最大覆盖集,有人能解释吗
2011-08-25 11:15
快速回复:uva 10160
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044724 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved