谁能帮我解释下这段代码
是采用暴搜的方法,关于四色图问题,能详细的解释下吗?
#include<iostream>
using namespace std;
int colour[40],cnt,n;
int map[100][100];
int judge(int deep,int k)
{
for( int j = 0; j < n;j++)
if(map[deep][j] && colour[j] == k)
return 0;
return 1;
}
int solve(int deep , int k )
{
if(deep == n )
return 1;
else
{
for( int i = 0 ;i < k;i++)
{
if( judge(deep,i) )
{
colour[deep] = i;
if(solve(deep + 1 , k))
return 1;
}
}
}
return 0;
}
int main()
{
while(cin>>n && n)
{
cnt = 0;
char a[100][100];
memset(map,0,sizeof(map));
memset(a,0,sizeof(a));
memset(colour,-1,sizeof(colour));
int i , j ;
for(i = 0 ;i < n ;i++)
{
cin>>a[i];
}
for(i = 0 ; i < n ;i++)
{
for( j = 2 ; j < n + 2;j++)
{
if(a[i][j] == '\0') break;
map[i][int(a[i][j] - 'A')] = 1;
map[int(a[i][j] - 'A')][i] = 1;
}//生成邻接矩阵
}
if( solve(0,1) )
{cout<<"1 channel needed."<<endl;continue;}
else if( solve(0,2))
{cout<<"2 channels needed."<<endl;continue;}
else if(solve(0,3))
{cout<<"3 channels needed."<<endl;continue;}
else
cout<<"4 channels needed."<<endl;
}
return 0;
}