从现在开始,zzy将在这里写一些抄了题解题目的zzy版本题解,以减轻内心的罪恶感【OvO】
codevs 1116 四色问题
一道通过率比A+B problem还要高的题目,我懒得去想,然后直接抄了题解,我好弱啊QAQ
其实这道题跟大多数搜索题是一样的,一步一步地递归,等得到一种解法之后记录下来,然后回溯,尝试另一条路径。。。
话不多说,下面给出zzy版本的题解:
#include<iostream>
using namespace std;
int a[10][10],col[10],n,tot;
void dfs(int step)
{
if(step>n)
{
tot++;
return;
}//这里是边界
for(int i=1;i<=4;i++)//尝试每种颜色
{
int ok=0;
for(int j=1;j<=n;j++)//判断使用这种颜色是否不符合题意
if(a[step][j]==1&&i==col[j])//判断是否衔接以及颜色是否冲突
{
ok=1;
break;
}
if(ok)//如果不符合题意则寻求另一种颜色
continue;
col[step]=i;//如果符合题意则加深搜素
dfs(step+1);
col[step]=0;//回溯归位
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
dfs(1);
cout<<tot;
return 0;
}
写完了,去睡觉了,啦啦啦【撒花】~