POJ1129 Channel Allocation

题意

给定一个无向图,用最少的颜色来涂色,使所有相邻的点颜色都不重复。

思路

数据很小,暴力即可。或者直接贪心(总是选择能选择的id最小的颜色),下面的代码就是贪心做的。

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 30;
const int INF = 1000000000;
int cl[maxn];
int n;
int cnt = 1;
bool eg[maxn][maxn];
bool used[maxn];
char s[maxn];
int main()
{
    //freopen("in.txt","r",stdin);
    while(scanf("%d",&n) && n) {
        cnt = 1;
        memset(cl,0,sizeof(cl));
        for(int i = 0 ; i < maxn ; i ++) {
            fill(eg[i],eg[i]+maxn,0);
        }
        for(int i = 0 ; i < n ; i ++) {
            scanf("%s",s);
            for(int j = 2 ; j < strlen(s) ; j ++) {
                eg[s[j]-‘A‘][i] = eg[i][s[j]-‘A‘] = true;
            }
        }
        cl[0] = 1;
        for(int i = 1 ; i < n ; i ++) {
            //搜第i个点相邻的点
            memset(used,false,sizeof(used));
            for(int j = 0 ; j < n ; j ++) {
                if(eg[i][j]) {
                    used[cl[j]] = true;
                }
            }
            //printf("%d\n",used[1]);
            for(int j = 1 ; j < maxn ; j ++) {
                if(!used[j]) {
                    cl[i] = j;
                    if(cnt < j) cnt = j;
                    break;
                }
            }
        }
        //printf("New ");
        //printf("%d %d %d %d\n",cl[0],cl[1],cl[2],cl[3]);
        printf("%d channel",cnt);
        if(cnt > 1) printf("s");
        printf(" needed.\n");
    }
    return 0;
}
时间: 2024-10-17 08:35:56

POJ1129 Channel Allocation的相关文章

poj1129 Channel Allocation(染色问题)

题目链接:poj1129 Channel Allocation 题意:要求相邻中继器必须使用不同的频道,求需要使用的频道的最少数目. 题解:就是求图的色数,这里采用求图的色数的近似有效算法——顺序着色算法(实质是一种贪心策略:在给任何一个顶点着色时,采用其邻接顶点中没有使用的,编号最小的颜色). 注:中继器网络是一个平面图,即图中不存在相交的边. 看讨论后发现这组数据,AC代码没过orz: 6 A:BEF B:AC C:BD D:CEF E:ADF F:ADE 正确答案应该是3 : A(1)B(

快速切题 poj1129 Channel Allocation

Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12334   Accepted: 6307 Description When a radio station is broadcasting over a very large area, repeaters are used to retransmit the signal so that every receiver has a s

poj1129 Channel Allocation DFS

题目 题意:给定N个节点,让你对其涂色,使其任何相邻的两个节点颜色不同. 思路: 1. 问题模型是着色问题,枚举颜色的个数, 每次枚举看可以完成全部点的着色. 2. 采用深搜,每一次当前色的种数深搜完毕就加1种,直到全部点都被着色完毕, 这样 从最少的开始深搜,结果出现肯定是最少的. 该题N<26,可以不用四色原理剪枝. 附上一发代码: 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #i

poj1129 Channel Allocation 染色问题

Description When a radio station is broadcasting over a very large area, repeaters are used to retransmit the signal so that every receiver has a strong signal. However, the channels used by each repeater must be carefully chosen so that nearby repea

POJ-1129 Channel Allocation (DFS)

Description When a radio station is broadcasting over a very large area, repeaters are used to retransmit the signal so that every receiver has a strong signal. However, the channels used by each repeater must be carefully chosen so that nearby repea

POJ 1129 Channel Allocation(暴力搜--涂色问题)

Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13295   Accepted: 6806 Description When a radio station is broadcasting over a very large area, repeaters are used to retransmit the signal so that every receiver has a s

Channel Allocation (poj 1129 dfs)

Language: Default Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12367   Accepted: 6325 Description When a radio station is broadcasting over a very large area, repeaters are used to retransmit the signal so that ever

Channel Allocation 贪心涂色

Channel Allocation 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <string> 7 #include <vector> 8 #include <set> 9 #include <map> 10

POJ 1129 Channel Allocation DFS 回溯

Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 15546   Accepted: 7871 Description When a radio station is broadcasting over a very large area, repeaters are used to retransmit the signal so that every receiver has a s