标签:
【题目描述】
给定一张包含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; }
非回溯解法:
标签:
原文地址:http://www.cnblogs.com/Ackermann/p/5902843.html