zoukankan      html  css  js  c++  java
  • 【CODEVS1116】四色问题

    Description

    给定N(小于等于8)个点的地图,以及地图上各点的相邻关系,请输出用4种颜色将地图涂色的所有方案数(要求相邻两点不能涂成相同的颜色)

    数据中0代表不相邻,1代表相邻

    Input

    第一行一个整数n,代表地图上有n个点

    接下来n行,每行n个整数,每个整数是0或者1。第i行第j列的值代表了第i个点和第j个点之间是相邻的还是不相邻,相邻就是1,不相邻就是0.

    我们保证a[i][j] = a[j][i] (a[i,j] = a[j,i])

    Output

    染色的方案数

    Sample Input

    8
    0 0 0 1 0 0 1 0 
    0 0 0 0 0 1 0 1 
    0 0 0 0 0 0 1 0 
    1 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 
    0 1 0 0 0 0 0 0 
    1 0 1 0 0 0 0 0 
    0 1 0 0 0 0 0 0

    Sample Output

    15552

    HINT

    n<=8

    题解

    #include<iostream>
    using namespace std;
    int a[10][10];
    int cr[10];//颜色 
    int ans=0,pd=0,n;
    void search(int k)
    {
        if (k == n+1) { ans++;    return;}
        for (int i=1;i<=4;i++)
        {
            for (int j=1;j<=n;j++)
                if (a[k][j] && cr[j] == i) //如果相邻的点用了这个颜色,就pass掉 
                {
                    pd=1;
                    break;
                }
            if (!pd) //k相邻点中没有点用这个颜色 
            {
                cr[k] = i;
                search(k+1);
            } 
            else pd = 0;
        }
        cr[k] = 0; //回溯 
    }
    int main()
    {
        cin>>n;
        for (int i=1;i<=n;i++)
            for (int j=1;j<=n;j++)
                cin>>a[i][j];
        search(1);
        cout<<ans;
    }
  • 相关阅读:
    PHP面向对象----- 类的自动加载
    PHP基础知识------页面静态化
    Laravel 开发环境搭建
    jenkins相关学习
    markdown语法学习强化
    bind 使用和配置记录
    关于整形和浮点型的格式输出
    函数体中定义的结构体和类型
    Volatile & Memory Barrier
    各种简单排序算法模版
  • 原文地址:https://www.cnblogs.com/liumengyue/p/5203499.html
Copyright © 2011-2022 走看看