首页 > 代码库 > 四色问题
四色问题
【题目描述】
给定一张包含N(N <= 8)个点的地图,以及地图上各点的相邻关系(0代表不相邻,1代表相邻),询问用4种颜色将地图涂色的所有方案数(要求相邻两点不能涂成相同的颜色)。
【输入描述】
第一行输入一个整数N,表示地图上有N个点;
接下来N行,每行输入N个整数,每个整数为0或1,第i行、第j列的值代表了第i个点和第j个点是否相邻。
【输出描述】
输出一个数,表示染色的所有方案数。
【样例输入】
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
【样例输出】
15552
深度优先搜索+回溯:
源代码:#include<cstdio>int n,ans(0),i[9];bool f[9][9];void DFS(int t){ for (int a=1;a<=4;a++) //似乎是一种染色问题的模板。 { bool Flag(0); for (int b=1;b<=n;b++) if (f[t][b]&&i[b]==a) { Flag=true; break; } if (!Flag) if (t==n) ans++; else { i[t]=a; DFS(t+1); i[t]=0; } }}int main() //朴素DFS。{ scanf("%d",&n); for (int a=1;a<=n;a++) for (int b=1;b<=n;b++) scanf("%d",&f[a][b]); DFS(1); printf("%d",ans); return 0;}
非回溯解法:
四色问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。