• qscoj53(图的m着色问题)


    题目链接:http://qscoj.cn/contest/12/problem/53/

    题意:中文题诶~

    思路:n个点, 那么最多用n种颜色,所以我们可以枚举颜色种类1~n,然后再判断用 i 种颜色可不可行;

    对于如何判断,dfs一遍就好了。。。

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include <iostream>
     4 #define MAXN 20
     5 using namespace std;
     6 
     7 int mp[MAXN][MAXN];//记录图
     8 int vis[MAXN];//vis[i]记录i着的是哪种颜色
     9 int sum=0;//保存可以着色的方案数
    10 int m, n;
    11 
    12 bool is_ok(int t, int i){//判断给节点t上颜色i是否可行
    13     for(int j=1; j<t; j++){
    14         if(mp[t][j]&&vis[j]==i)
    15            return false;
    16     }
    17     return true;
    18 }
    19 
    20 void dfs(int t, int cnt){//dfs判断用cnt中颜色是否可以给n个点着色
    21     if(t>n){
    22         sum++;
    23         return;
    24     }
    25     for(int i=1; i<=cnt; i++){
    26         if(is_ok(t, i)){
    27             vis[t]=i;
    28             dfs(t+1, cnt);
    29             vis[t]=0;
    30         }
    31     }
    32 }
    33 
    34 int main(void){
    35     while(scanf("%d%d", &n, &m)!=EOF){
    36         memset(mp, 0, sizeof(mp));
    37         for(int i=0; i<m; i++){
    38             int x, y;
    39             scanf("%d%d", &x, &y);
    40             mp[x][y]=mp[y][x]=1;//建临接矩阵
    41         }
    42         for(int i=1; i<=n; i++){//枚举颜色种数
    43             memset(vis, 0, sizeof(vis));
    44             sum=0;
    45             dfs(1, i);
    46             if(sum){
    47                 printf("%d
    ", i);
    48                 break;
    49             }
    50         }
    51     }
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    datatables出现横向滚动条
    mumu模拟器设置代理/打开网络连接(windows)
    a标签下划线
    python 配置导入方式
    redis命令
    django+mongodb 内置用户控制
    异常补充
    关于异常的总结
    java 常用类的方法
    java 日期时间类加Calendar的set和add方法
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6666476.html
Copyright © 2020-2023  润新知