当前位置: 首页 > news >正文

【题解】四色定理

题目描述

著名的四色定理你一定听说过吧?这可是近代世界三大数学难题之一呢(顺便提上一句,另外两个是费马定理和哥德马赫猜想)。
四色定理的提出来自英国。1852年,毕业于伦敦大学的弗南西斯·格思里(Francis Guthrie)在一家科研单位搞地图着色工作时,发现了一种有趣的现象:“看来,每幅地图都可以用四种颜色着色,使得有共同边界的国家着上不同的颜色。”(注意:只要求有公共边的区域不同色就可以,只有公共顶点的同色也没关系)
这个结论能不能从数学上加以严格证明呢?他和在大学读书的弟弟格里斯决心试一试。兄弟二人为证明这一问题而使用的稿纸已经堆了一大叠,可是研究工作没有进展。
1852年10月23日,他的弟弟就这个问题的证明请教他的老师、著名数学家德·摩尔根,摩尔根也没有能找到解决这个问题的途径,于是写信向自己的好友、著名数学家哈密尔顿爵士请教。哈密尔顿接到摩尔根的信后,对四色问题进行论证。但直到1865年哈密尔顿逝世为止,问题也没有能够解决。
直到1976年,在J. Koch的算法的支持下,美国数学家阿佩尔(Kenneth Appel)与哈肯(Wolfgang Haken)在美国伊利诺斯大学的两台不同的电子计算机上,用了1200个小时,作了100亿判断,才终于完成了四色定理的证明。
你的任务相对那些数学家们来说当然要容易得多:你只要编写一个程序,计算一下在给定的一张有5个区域的地图上,用四种颜色填充不同区域,并保证有公共边的区域不同色的方案数有多少就可以了。

输入输出格式

输入格式:

第一行是一个整数N(0≤n≤10),分别表示地图中有公共边的区域的信息数量。
下面N行,每行一对整数,表示对所有区域编号之后,此两个编号的区域是有公共边的。

输出格式:

一行,只有一个整数,表示用四种颜色填充地图的总方案数。注意,在某些方案中,所有四种颜色不必都用到。

输入输出样例

输入样例:

4
1 2
1 3
1 4
1 5

输出样例:

324
这道题用搜索就可以解出来,首先求出它所有方案数,再判断我求出的方案是否符合条件

#include<iostream>
using namespace std;
int n,ans,color[15];
struct node
{
    int x;
    int y;
}pic[15];
void dfs(int pointer)
{
    if(pointer>5)//判断
    {
        bool check=false;
        for(register int i=1;i<=n;++i)
        {
            if(color[pic[i].x]==color[pic[i].y])
            {
                check=true;
                break;
            }
        }
        if(check==false) ++ans;
        return;
    }
    else//枚举方案
    {
        for(register int i=1;i<=4;++i)
        {
            color[pointer]=i;
            dfs(pointer+1);
        }
    }
}
int main()
{
    cin>>n;
    for(register int i=1;i<=n;++i)
    {
        cin>>pic[i].x>>pic[i].y;
    }
    dfs(1);
    cout<<ans;
}

转载于:https://www.cnblogs.com/2021-yanghaoran/p/10790048.html

相关文章:

  • Android 实现动态背景“五彩蛛网”特效,让你大开眼界!
  • python高并发?
  • 雷林鹏分享:二级目录配置CI应用
  • Sym System Recovery 2013 ( 備份 操作 )
  • iOS-在项目中引入RSA算法
  • 简单的数学题
  • 关于JS引擎优化的理解
  • 如何优雅的备份账号相关信息
  • mybatis学习总结
  • 全球首个大规模光电芯片到来
  • 1.4T的mysql表删除
  • MYSQL-SELECT查
  • css 浮动的时候如何,div进行居中
  • 大文件如何传输,大文件的传输方式有哪些?
  • 5 分钟掌握 JavaScript 实用窍门
  • @angular/forms 源码解析之双向绑定
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Android 架构优化~MVP 架构改造
  • Android单元测试 - 几个重要问题
  • If…else
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Laravel5.4 Queues队列学习
  • leetcode46 Permutation 排列组合
  • vue-cli在webpack的配置文件探究
  • Web Storage相关
  • 检测对象或数组
  • 精彩代码 vue.js
  • 前嗅ForeSpider教程:创建模板
  • 如何使用 JavaScript 解析 URL
  • 入手阿里云新服务器的部署NODE
  • 软件开发学习的5大技巧,你知道吗?
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 温故知新之javascript面向对象
  • 终端用户监控:真实用户监控还是模拟监控?
  • puppet连载22:define用法
  • 湖北分布式智能数据采集方法有哪些?
  • #define,static,const,三种常量的区别
  • #QT(TCP网络编程-服务端)
  • #Z2294. 打印树的直径
  • (3)llvm ir转换过程
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (floyd+补集) poj 3275
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (windows2012共享文件夹和防火墙设置
  • (zhuan) 一些RL的文献(及笔记)
  • (搬运以学习)flask 上下文的实现
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (四) 虚拟摄像头vivi体验
  • (一)RocketMQ初步认识
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • **python多态
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net 托管代码与非托管代码