• 四色定理+dfs(poj 1129)


      题目:Channel Allocation

      题意:要求A:BCD,A与B,C,D都不相同,求不同的值,典型的四色定理;

      

    #include <iostream>
    #include <algorithm>
    #include <stdlib.h>
    #include <time.h>
    #include <cmath>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <set>
    
    #define c_false ios_base::sync_with_stdio(false); cin.tie(0)
    #define INF 0x3f3f3f3f
    #define INFL 0x3f3f3f3f3f3f3f3f
    #define zero_(x,y) memset(x , y , sizeof(x))
    #define zero(x) memset(x , 0 , sizeof(x))
    #define MAX(x) memset(x , 0x3f ,sizeof(x))
    #define swa(x,y) {LL s;s=x;x=y;y=s;}
    using namespace std ;
    #define N 105
    
    const double PI = acos(-1.0);
    typedef long long LL ;
    
    int mapp[N][N], color[N];
    int col,flag;
    int n;
    string s;
    bool ok(int i){
        for(int j = 1; j <= 26; j++){
            if(!mapp[i][j]) continue;
            if(color[i] == color[j]) return false;
        }
        return true;
    }
    
    void dfs(int num){
        if(num > n) {flag = 1; return ;}
        for(int i = 1; i <= col; i ++){
            color[num] = i;
            if(ok(num))
                dfs(num+1);
            color[num]= 0;    ///记得回溯时要清零啊!!!
        }
    }
    
    int main(){
        //freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        while(cin>>n && n){
            flag = 0;
            zero(mapp);
            for(int i = 0; i< n;i++){
                cin>>s;
                int k = s.size();
                int x,y;
                for(int j = 2;j< k;j++){
                    x = s[0] - 'A' +1;
                    y = s[j] - 'A' +1;
                    mapp[x][y] = mapp[y][x] = 1;
                }
            }
            for(col = 1; col <= 4; col++){
                dfs(1);
                if(flag) break;
            }
            if(col == 1)
                printf("%d channel needed.
    ", col);
            else
                printf("%d channels needed.
    ", col);
        }
        return 0;
    }
  • 相关阅读:
    LODOP设置打印份数及是否逐份输出
    LODOP中table自动分页补线加border
    PS弧形边缘的去黑色背景色
    【解决篇】映美FP-530K+打印发票卡纸,色带安装问题
    LODOP打印项水平居中
    C-LODOP的端口和网站的端口
    java---interrupt、interrupted和isInterrupted的区别
    java------守护线程与非守护线程
    java----EL表达式
    java----IO和NIO的区别
  • 原文地址:https://www.cnblogs.com/yoyo-sincerely/p/5294285.html
Copyright © 2020-2023  润新知