我大意了...用什么思维推理呢!这是深搜的题啊!!!

 **

【中山纪念中学信息学竞赛2010测试赛】四色定理

(File IO): input:c.in output:c.out

**
题目描述
著名的四色定理你一定听说过吧?这可是近代世界三大数学难题之一唷(顺便提上一句,另外两个是费马定理和哥德马赫猜想)。
四色定理的提出来自英国。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<bits/stdc++.h>
using namespace std;
int n,a[10000],b[10000],ans,x[1000],c[1000][1000],o[5],vis[1000];
void dg(int w){
	if(w==6){
		ans++;
		return ;
	}
	for(int i=1;i<=4;i++){
		int temp=0;
		for(int j=1;j<=5;j++){
			if(c[w][j]==1&&vis[j]==i){
				temp=1;
				break;
			}
		}
		if(temp==1) continue;
		else{
			vis[w]=i;
			dg(w+1);
			vis[w]=0;
		}
	}
}
int main(){
	freopen("c.in","r",stdin);
	freopen("c.out","w",stdout); 
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
		c[a[i]][b[i]]=1;
		c[b[i]][a[i]]=1;
	}
	dg(1);
	cout<<ans;
	fclose(stdin);
	fclose(stdout);
	return 0;
} 

制作不易,求心心~~
(你们还想看神马题,在评论去说出来嗷!别太难我可是小学生!!!)
下期预告:

这道题递归嘛,很简单…啊我怎么零分!?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值