「CODEVS1116」四色问题
题目描述
4色问题:对平面或球面的任何一幅地图,只需要使用4种颜色就可以给地图上的每个国家填色,使得任意2个有一段公共边界的国家所填的颜色是不同的。
输入
用邻接矩阵表示地图。读入格式如下:
N(有N个国家,N不超过20)
N行用空格隔开的0/1串(1表示相邻,0表示不相邻)
输出
最多的填色方案
样例输入
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
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
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include<iostream> using namespace std; bool a[21][21]; int cr[21]; int n; int pd=0; int ans=0; 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){pd=1;break;} } if(!pd){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; return 0; } |
Subscribe